Skip to content

Mock testing substitutions making the tree hang #927

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
pepeRossRobotics opened this issue Feb 4, 2025 · 1 comment
Closed

Mock testing substitutions making the tree hang #927

pepeRossRobotics opened this issue Feb 4, 2025 · 1 comment

Comments

@pepeRossRobotics
Copy link

Describe the bug
I am testing simple mock testing using the guide here and I am experiencing that my tree stops ticking once the tree gets to the substituted node.

The tree is loaded using XML and the substitution rules are loaded using a JSON file

How to Reproduce
This is my tree:

<root BTCPP_format="4">
    <BehaviorTree ID="MainTree">
        <Sequence>
            <PrintToConsole
                name="PrintToConsole"
                string="testing"
                prefix="pre sub"
                timestamp="false"
            />
            <Script name="script_1"  code=" next_inspection_point:='0' "/>

            <PrintToConsole
                name="PrintToConsole"
                string="testing"
                prefix="post sub"
                timestamp="false"
            />
            <Delay delay_msec="2000">
                <AlwaysSuccess/>
            </Delay>
        </Sequence>
    </BehaviorTree>
</root>

This is the part of the code that runs the tree:

void Mk4BehaviorTrees::execute(const std::shared_ptr<BtGoalHandle> goal_handle)
{
  RCLCPP_INFO(get_logger(), "Executing goal");
  const auto goal_details = goal_handle->get_goal();

  if (does_inspection_file_exist(goal_details->path)) {
    load_inspection(goal_details->path);
  } else {
    send_no_inspection_file(goal_handle, goal_details->path);
    return;
  }

  // This is called if the using_mock_nodes is set to true
  load_mock_nodes();


  start_time_ = get_clock()->now();
  while (rclcpp::ok()) {
    if (goal_handle->is_canceling()) {
      running_tree_->haltTree();
      cleanup_tree();
      send_goal_cancelled(goal_handle);
      is_tree_being_executed_ = false;
      return;
    }

    send_feedback(goal_handle);
    running_tree_->tickOnce();
    RCLCPP_INFO(get_logger(), "Ticking");
    running_tree_->sleep(std::chrono::milliseconds(100));
  }

  if (rclcpp::ok()) {
    cleanup_tree();
    send_goal_completed(goal_handle);
  }
}

Without the substitutions this is the trees output:

[component_container-1] [INFO] [1738660757.723056057] [behavior_trees_node]: 
[component_container-1] pre sub
[component_container-1] testing
[component_container-1] 
[component_container-1] [INFO] [1738660757.723304994] [behavior_trees_node]: 
[component_container-1] post sub
[component_container-1] testing
[component_container-1] 
[component_container-1] [INFO] [1738660757.723522637] [behavior_trees_node]: Ticking
[component_container-1] [INFO] [1738660757.824344850] [behavior_trees_node]: Ticking
[component_container-1] [INFO] [1738660757.925034097] [behavior_trees_node]: Ticking
[component_container-1] [INFO] [1738660758.025824578] [behavior_trees_node]: Ticking
[component_container-1] [INFO] [1738660758.126585792] [behavior_trees_node]: Ticking
[component_container-1] [INFO] [1738660758.227266241] [behavior_trees_node]: Ticking
[component_container-1] [INFO] [1738660758.327910303] [behavior_trees_node]: Ticking
[component_container-1] [INFO] [1738660758.428539384] [behavior_trees_node]: Ticking
[component_container-1] [INFO] [1738660758.529365846] [behavior_trees_node]: Ticking
[component_container-1] [INFO] [1738660758.633216384] [behavior_trees_node]: Ticking
[component_container-1] [INFO] [1738660758.733816826] [behavior_trees_node]: Ticking
[component_container-1] [INFO] [1738660758.834551317] [behavior_trees_node]: Ticking
[component_container-1] [INFO] [1738660758.935329955] [behavior_trees_node]: Ticking
[component_container-1] [INFO] [1738660759.036006334] [behavior_trees_node]: Ticking
[component_container-1] [INFO] [1738660759.136620944] [behavior_trees_node]: Ticking
[component_container-1] [INFO] [1738660759.237264127] [behavior_trees_node]: Ticking
[component_container-1] [INFO] [1738660759.337703341] [behavior_trees_node]: Ticking
[component_container-1] [INFO] [1738660759.438322202] [behavior_trees_node]: Ticking
[component_container-1] [INFO] [1738660759.539171086] [behavior_trees_node]: Ticking
[component_container-1] [INFO] [1738660759.639594343] [behavior_trees_node]: Ticking
[component_container-1] [INFO] [1738660759.723999631] [behavior_trees_node]: Ticking
[component_container-1] [INFO] [1738660759.824982967] [behavior_trees_node]: 
[component_container-1] pre sub
[component_container-1] testing
[component_container-1] 
[component_container-1] [INFO] [1738660759.825460732] [behavior_trees_node]: 
[component_container-1] post sub
[component_container-1] testing
[component_container-1] 

When loading the following substitution:

{
  "TestNodeConfigs": {
    "MyTest": {
      "return_status": "SUCCESS"
    }
  },

  "SubstitutionRules": {
    "script_1": "MyTest"
  }
}

The code output is:

[component_container-1] [INFO] [1738660946.246000910] [behavior_trees_node]: 
[component_container-1] pre sub
[component_container-1] testing
[component_container-1] 

And never prints the Ticking message.

Also the execution hangs so I cannot finish the process cleanly.

Any pointer how I could debug this?

@pepeRossRobotics
Copy link
Author

Using a clean docker image with the most up to date packages solved this. sorry for the hassle

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant