예제 #1
0
 def test_add_node(self, tree_manager, tree):
     visualization = tree_manager.tree_nodes['visualization'].node
     tree_manager.remove_node('visualization')
     assert 'visualization' not in [
         x.node.name
         for x in tree_manager.tree_nodes['planning II'].disabled_children
     ]
     assert 'visualization' not in [
         x.node.name
         for x in tree_manager.tree_nodes['planning II'].enabled_children
     ]
     assert 'visualization' not in display.ascii_tree(tree.root)
     with pytest.raises(KeyError):
         tree_manager.enable_node('visualization')
     tree_manager.insert_node(visualization, 'wait for goal', 3)
     assert 'visualization' in tree_manager.tree_nodes.keys()
     assert 'visualization' in display.ascii_tree(tree.root)
     assert 'visualization' not in [
         x.node.name
         for x in tree_manager.tree_nodes['wait for goal'].disabled_children
     ]
     assert 'visualization' in [
         x.node.name
         for x in tree_manager.tree_nodes['wait for goal'].enabled_children
     ]
예제 #2
0
 def test_disable_enable_vis(self, tree_manager, tree):
     ascii_tree = display.ascii_tree(tree.root)
     assert 'visualization' not in [
         x.node.name
         for x in tree_manager.tree_nodes['planning II'].disabled_children
     ]
     assert 'visualization' in [
         x.node.name
         for x in tree_manager.tree_nodes['planning II'].enabled_children
     ]
     tree_manager.disable_node('visualization')
     assert 'visualization' in [
         x.node.name
         for x in tree_manager.tree_nodes['planning II'].disabled_children
     ]
     assert 'visualization' not in [
         x.node.name
         for x in tree_manager.tree_nodes['planning II'].enabled_children
     ]
     assert 'visualization' not in display.ascii_tree(tree.root)
     tree_manager.enable_node('visualization')
     assert display.ascii_tree(tree.root) == ascii_tree
     assert 'visualization' not in [
         x.node.name
         for x in tree_manager.tree_nodes['planning II'].disabled_children
     ]
     assert 'visualization' in [
         x.node.name
         for x in tree_manager.tree_nodes['planning II'].enabled_children
     ]
예제 #3
0
    def test_remove_disabled_node(self, tree_manager, tree):
        assert 'visualization' not in [
            x.node.name
            for x in tree_manager.tree_nodes['planning II'].disabled_children
        ]
        assert 'visualization' in [
            x.node.name
            for x in tree_manager.tree_nodes['planning II'].enabled_children
        ]
        tree_manager.disable_node('visualization')
        tree_manager.remove_node('visualization')
        assert 'visualization' not in [
            x.node.name
            for x in tree_manager.tree_nodes['planning II'].disabled_children
        ]
        assert 'visualization' not in [
            x.node.name
            for x in tree_manager.tree_nodes['planning II'].enabled_children
        ]
        assert 'visualization' not in display.ascii_tree(tree.root)
        with pytest.raises(KeyError):
            tree_manager.enable_node('visualization')
        assert display.ascii_tree(tree.root) == """root
[-] wait for goal
    --> tf
    --> js1
    --> pybullet updater
    --> has goal
    --> js2
--> cleanup
--> process move goal
    --> planning I
        --> update constraints
        --> planning II
            --> goal canceled
            --> cpi marker
            --> planning III
    --> set move goal
--> plot trajectory
--> post processing
    --> wiggle_cancel_final_detection
    --> post_processing
--> move robot
    --> execute?
    --> monitor execution
        --> goal canceled
        --> send traj
--> send result
"""
        assert 'visualization' not in [
            x.node.name
            for x in tree_manager.tree_nodes['planning II'].disabled_children
        ]
        assert 'visualization' not in [
            x.node.name
            for x in tree_manager.tree_nodes['planning II'].enabled_children
        ]
예제 #4
0
 def test_same_order_add_node(self, tree_manager, tree):
     visualization = tree_manager.tree_nodes['visualization'].node
     tree_manager.remove_node('visualization')
     tree_manager.disable_node('cpi marker')
     tree_manager.disable_node('update constraints')
     assert 'visualization' not in display.ascii_tree(tree.root)
     assert 'cpi marker' not in display.ascii_tree(tree.root)
     assert 'update constraints' not in display.ascii_tree(tree.root)
     tree_manager.insert_node(visualization, 'planning I', 1)
     tree_manager.enable_node('cpi marker')
     tree_manager.enable_node('update constraints')
     assert display.ascii_tree(tree.root) == """root
예제 #5
0
 def test_enable_node_twice(self, tree_manager, tree):
     ascii_tree = display.ascii_tree(tree.root)
     assert 'visualization' not in [
         x.node.name
         for x in tree_manager.tree_nodes['planning II'].disabled_children
     ]
     assert 'visualization' in [
         x.node.name
         for x in tree_manager.tree_nodes['planning II'].enabled_children
     ]
     with pytest.raises(ValueError):
         tree_manager.enable_node('visualization')
     assert 'visualization' not in [
         x.node.name
         for x in tree_manager.tree_nodes['planning II'].disabled_children
     ]
     assert 'visualization' in [
         x.node.name
         for x in tree_manager.tree_nodes['planning II'].enabled_children
     ]
     assert ascii_tree == display.ascii_tree(tree.root)
예제 #6
0
 def test_everything(self, tree_manager, tree):
     update_constraints = tree_manager.tree_nodes['update constraints'].node
     cpi_marker = tree_manager.tree_nodes['cpi marker'].node
     visualization = tree_manager.tree_nodes['visualization'].node
     js1 = tree_manager.tree_nodes['js1'].node
     post_processing = tree_manager.tree_nodes['post processing'].node
     tree_manager.remove_node('visualization')
     tree_manager.remove_node('cpi marker')
     tree_manager.remove_node('update constraints')
     tree_manager.remove_node('post processing')
     tree_manager.remove_node('js1')
     tree_manager.disable_node('pybullet updater')
     tree_manager.remove_node('pybullet updater')
     tree_manager.insert_node(visualization, 'wait for goal', 1)
     tree_manager.insert_node(cpi_marker, 'wait for goal', 3)
     tree_manager.insert_node(js1, 'wait for goal')
     tree_manager.insert_node(update_constraints, 'wait for goal', 1)
     tree_manager.insert_node(post_processing, 'wait for goal', 4)
     assert display.ascii_tree(tree.root) == """root
예제 #7
0
 def test_disable_child_of_disabled_node(self, tree_manager, tree):
     ascii_tree = display.ascii_tree(tree.root)
     assert 'process move goal' not in [
         x.node.name
         for x in tree_manager.tree_nodes['root'].disabled_children
     ]
     assert 'process move goal' in [
         x.node.name
         for x in tree_manager.tree_nodes['root'].enabled_children
     ]
     tree_manager.disable_node('process move goal')
     assert 'process move goal' not in display.ascii_tree(tree.root)
     assert 'visualization' not in display.ascii_tree(tree.root)
     assert 'process move goal' in [
         x.node.name
         for x in tree_manager.tree_nodes['root'].disabled_children
     ]
     assert 'process move goal' not in [
         x.node.name
         for x in tree_manager.tree_nodes['root'].enabled_children
     ]
     assert 'process move goal' not in display.ascii_tree(tree.root)
     tree_manager.disable_node('visualization')
     assert 'visualization' in [
         x.node.name
         for x in tree_manager.tree_nodes['planning II'].disabled_children
     ]
     assert 'visualization' not in [
         x.node.name
         for x in tree_manager.tree_nodes['planning II'].enabled_children
     ]
     tree_manager.enable_node('process move goal')
     assert 'process move goal' in display.ascii_tree(tree.root)
     assert 'visualization' not in display.ascii_tree(tree.root)
     tree_manager.enable_node('visualization')
     assert ascii_tree == display.ascii_tree(tree.root)
예제 #8
0
def test_text_trees():
    console.banner("Text Trees")

    root = py_trees.composites.Selector("Selector")
    high_priority = py_trees.behaviours.Count(name="High Priority",
                                              fail_until=1,
                                              running_until=1,
                                              success_until=10)
    low_priority = py_trees.behaviours.Running(name="Low Priority")
    root.add_children([high_priority, low_priority])
    tree = py_trees.trees.BehaviourTree(root)
    snapshot_visitor = py_trees.visitors.SnapshotVisitor()
    tree.visitors.append(snapshot_visitor)
    tree.tick()
    tree.tick()
    snippets = {}
    # Visited
    snippets["visited_ascii_tree"] = display.ascii_tree(
        tree.root,
        visited=snapshot_visitor.visited,
        previously_visited=snapshot_visitor.previously_visited)
    print(snippets["visited_ascii_tree"])
    snippets["visited_xhtml"] = display.xhtml_tree(
        tree.root,
        visited=snapshot_visitor.visited,
        previously_visited=snapshot_visitor.previously_visited)
    print(snippets["visited_xhtml"])
    print()
    # Non-Visited
    snippets["non_visited_ascii_tree"] = display.ascii_tree(tree.root)
    print(snippets["non_visited_ascii_tree"])
    print()
    snippets["non_visited_xhtml"] = display.xhtml_tree(tree.root)
    print(snippets["non_visited_xhtml"])
    print()

    # Non-Visited with Status
    snippets["non_visited_ascii_tree_status"] = display.ascii_tree(
        tree.root, show_status=True)
    print(snippets["non_visited_ascii_tree_status"])
    print()
    snippets["non_visited_xhtml_status"] = display.xhtml_tree(tree.root,
                                                              show_status=True)
    print(snippets["non_visited_xhtml_status"])
    print()

    print_assert_banner()
    for snippet_name, snippet in snippets.items():
        for b in root.iterate():
            print_assert_details("{} in {}".format(b.name, snippet_name), True,
                                 b.name in snippet)
            assert (b.name in snippet)

    print_assert_details("status symbol '-' in visited_ascii_tree", True, '-'
                         in snippets["visited_ascii_tree"])
    assert ('-' in snippets["visited_ascii_tree"])
    print_assert_details("status symbol '-' in non_visited_ascii_tree_status",
                         True, '-'
                         in snippets["non_visited_ascii_tree_status"])
    assert ('-' in snippets["non_visited_ascii_tree_status"])
    try:
        unused_element = xml.etree.ElementTree.fromstring(
            snippets["visited_xhtml"])
        unused_element = xml.etree.ElementTree.fromstring(
            snippets["non_visited_xhtml"])
        unused_element = xml.etree.ElementTree.fromstring(
            snippets["non_visited_xhtml_status"])
        print_assert_details("xml ParseError", None, None)
    except xml.etree.ElementTree.ParseError as e:
        print_assert_details("xml ParseError", None, str(e))
        assert False, "failed to parse the xhtml snippet as valid xml"
예제 #9
0
 def post_tick(snapshot_visitor, behaviour_tree):
     print(u'\n' + ascii_tree(behaviour_tree.root,
                              snapshot_information=snapshot_visitor))
예제 #10
0
 def test_add_node_twice(self, tree_manager, tree):
     visualization = tree_manager.tree_nodes['visualization'].node
     with pytest.raises(ValueError):
         tree_manager.insert_node(visualization, 'wait for goal', 3)
     assert display.ascii_tree(tree.root) == """root
예제 #11
0
 def test_enable_disable_multiple_nodes(self, tree_manager, tree):
     ascii_tree = display.ascii_tree(tree.root)
     assert 'visualization' not in [
         x.node.name
         for x in tree_manager.tree_nodes['planning II'].disabled_children
     ]
     assert 'visualization' in [
         x.node.name
         for x in tree_manager.tree_nodes['planning II'].enabled_children
     ]
     assert 'cpi marker' not in [
         x.node.name
         for x in tree_manager.tree_nodes['planning II'].disabled_children
     ]
     assert 'cpi marker' in [
         x.node.name
         for x in tree_manager.tree_nodes['planning II'].enabled_children
     ]
     assert 'wait for goal' not in [
         x.node.name
         for x in tree_manager.tree_nodes['root'].disabled_children
     ]
     assert 'wait for goal' in [
         x.node.name
         for x in tree_manager.tree_nodes['root'].enabled_children
     ]
     tree_manager.disable_node('visualization')
     tree_manager.disable_node('cpi marker')
     tree_manager.disable_node('wait for goal')
     assert 'visualization' in [
         x.node.name
         for x in tree_manager.tree_nodes['planning II'].disabled_children
     ]
     assert 'visualization' not in [
         x.node.name
         for x in tree_manager.tree_nodes['planning II'].enabled_children
     ]
     assert 'visualization' not in display.ascii_tree(tree.root)
     assert 'cpi marker' in [
         x.node.name
         for x in tree_manager.tree_nodes['planning II'].disabled_children
     ]
     assert 'cpi marker' not in [
         x.node.name
         for x in tree_manager.tree_nodes['planning II'].enabled_children
     ]
     assert 'cpi marker' not in display.ascii_tree(tree.root)
     assert 'wait for goal' in [
         x.node.name
         for x in tree_manager.tree_nodes['root'].disabled_children
     ]
     assert 'wait for goal' not in [
         x.node.name
         for x in tree_manager.tree_nodes['root'].enabled_children
     ]
     assert 'wait for goal' not in display.ascii_tree(tree.root)
     tree_manager.enable_node('cpi marker')
     tree_manager.enable_node('visualization')
     tree_manager.enable_node('wait for goal')
     assert display.ascii_tree(tree.root) == ascii_tree
     assert 'visualization' not in [
         x.node.name
         for x in tree_manager.tree_nodes['planning II'].disabled_children
     ]
     assert 'visualization' in [
         x.node.name
         for x in tree_manager.tree_nodes['planning II'].enabled_children
     ]
     assert 'cpi marker' not in [
         x.node.name
         for x in tree_manager.tree_nodes['planning II'].disabled_children
     ]
     assert 'cpi marker' in [
         x.node.name
         for x in tree_manager.tree_nodes['planning II'].enabled_children
     ]
     assert 'wait for goal' not in [
         x.node.name
         for x in tree_manager.tree_nodes['root'].disabled_children
     ]
     assert 'wait for goal' in [
         x.node.name
         for x in tree_manager.tree_nodes['root'].enabled_children
     ]