Skip to content

Commit

Permalink
Add BehaviorTree visualization support using Groot
Browse files Browse the repository at this point in the history
* Add nav2 TreeNodesModel containing all BT Nodes used

* Add instructions on using Groot to visualize behavior trees

Signed-off-by: Sarathkrishnan Ramesh <sarathkrishnan99@gmail.com>
  • Loading branch information
Sarath18 committed May 14, 2020
1 parent ee719c9 commit 21e2ea9
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 0 deletions.
12 changes: 12 additions & 0 deletions nav2_bt_navigator/behavior_trees/README.md
Original file line number Diff line number Diff line change
@@ -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 only supports visualization of the behavior tree along with the creation of new nodes (except ControlNodes) using the Groot. Additional features 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_bt_navigator/behavior_trees/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.
66 changes: 66 additions & 0 deletions nav2_bt_navigator/behavior_trees/nav2_tree_nodes.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
<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>

</TreeNodesModel>
</root>

0 comments on commit 21e2ea9

Please sign in to comment.