diff --git a/nav2_behavior_tree/CMakeLists.txt b/nav2_behavior_tree/CMakeLists.txt index d9410ff91667aedf1b451b0528834dda760a6abb..5b1a36bcaccd21481a4859f65e1472929272dca5 100644 --- a/nav2_behavior_tree/CMakeLists.txt +++ b/nav2_behavior_tree/CMakeLists.txt @@ -123,6 +123,8 @@ install(DIRECTORY include/ DESTINATION include/ ) +install(FILES nav2_tree_nodes.xml DESTINATION share/${PROJECT_NAME}) + if(BUILD_TESTING) find_package(ament_lint_auto REQUIRED) ament_lint_auto_find_test_dependencies() diff --git a/nav2_behavior_tree/groot_instructions.md b/nav2_behavior_tree/groot_instructions.md new file mode 100644 index 0000000000000000000000000000000000000000..b1189a6ba6b23e0f07b7d8b5ef4762bf337c72b3 --- /dev/null +++ b/nav2_behavior_tree/groot_instructions.md @@ -0,0 +1,12 @@ +# Instructions on using Groot +[Groot](https://github.com/BehaviorTree/Groot) is the companion application of [BehaviorTree.CPP](https://github.com/BehaviorTree/BehaviorTree.CPP) to create, edit, and monitor behavior trees. + +##### Note: Currently fully supports visualization of the behavior trees. It also supports the creation of custom nodes except control flow nodes. Support for custom control flow nodes and real-time monitoring is under development. + +### BehaviorTree visualization +To visualize the behavior trees using Groot: +1. Open Groot in editor mode +2. Select the `Load palette from file` option (import button) near the top left corner. +3. Open the file `/path/to/navigation2/nav2_behavior_tree/nav2_tree_nodes.xml` to import all the behavior tree nodes used for navigation. +4. Select `Load tree` option near the top left corner +5. Browse the tree you want to visualize the select ok. diff --git a/nav2_behavior_tree/nav2_tree_nodes.xml b/nav2_behavior_tree/nav2_tree_nodes.xml new file mode 100644 index 0000000000000000000000000000000000000000..35675d99381900378d35af131ae05ada486fef42 --- /dev/null +++ b/nav2_behavior_tree/nav2_tree_nodes.xml @@ -0,0 +1,76 @@ +<?xml version="1.0"?> +<!-- + For instructions on using Groot and description of the following BehaviorTree nodes, + please refer to the groot_instructions.md and REAMDE.md respectively located in the + nav2_behavior_tree package. +--> +<root> + <TreeNodesModel> + <!-- ############################### ACTION NODES ################################# --> + <Action ID="BackUp"> + <input_port name="backup_dist">Distance to backup</input_port> + <input_port name="backup_speed">Speed at which to backup</input_port> + </Action> + + <Action ID="ClearEntireCostmap"> + <input_port name="service_name">Service name</input_port> + </Action> + + <Action ID="ComputePathToPose"> + <input_port name="goal">Destination to plan to</input_port> + <output_port name="path">Path created by ComputePathToPose node</output_port> + <input_port name="planner_id"/> + </Action> + + <Action ID="FollowPath"> + <input_port name="controller_id" default="FollowPath"/> + <input_port name="path">Path to follow</input_port> + </Action> + + <Action ID="NavigateToPose"> + <input_port name="orientation">Orientation</input_port> + <input_port name="position">Position</input_port> + </Action> + + <Action ID="RandomCrawl"/> + + <Action ID="Spin"> + <input_port name="spin_dist">Spin distance</input_port> + </Action> + + <Action ID="Wait"> + <input_port name="wait_duration">Wait time</input_port> + </Action> + + <!-- ############################### CONDITION NODES ############################## --> + <Condition ID="GoalReached"> + <input_port name="goal">Destination</input_port> + </Condition> + + <Condition ID="IsStuck"/> + + <Condition ID="TransformAvailable"> + <input_port name="child">Child frame for transform</input_port> + <input_port name="parent">Parent frame for transform</input_port> + </Condition> + + <!-- ############################### CONTROL NODES ################################ --> + <Control ID="PipelineSequence"/> + + <Control ID="RecoveryNode"> + <input_port name="number_of_retries">Number of retries</input_port> + </Control> + + <Control ID="RoundRobin"/> + + <!-- ############################### DECORATOR NODES ############################## --> + <Decorator ID="RateController"> + <input_port name="hz">Rate</input_port> + </Decorator> + + <Decorator ID="DistanceController"> + <input_port name="distance">Distance</input_port> + </Decorator> + + </TreeNodesModel> +</root>