예제 #1
0
def tree(blackboard):
    # ----------------------------------------------
    wait_for_goal = Sequence(u'wait for goal')
    wait_for_goal.add_child(TestBehavior(u'tf'))
    wait_for_goal.add_child(TestBehavior(u'js1'))
    wait_for_goal.add_child(TestBehavior(u'pybullet updater'))
    wait_for_goal.add_child(TestBehavior(u'has goal'))
    wait_for_goal.add_child(TestBehavior(u'js2'))
    # ----------------------------------------------
    planning_3 = PluginBehavior(u'planning III', sleep=0)
    planning_3.add_plugin(TestBehavior(u'coll'))
    planning_3.add_plugin(TestBehavior(u'controller'))
    planning_3.add_plugin(TestBehavior(u'kin sim'))
    planning_3.add_plugin(TestBehavior(u'log'))
    planning_3.add_plugin(TestBehavior(u'goal reached'))
    planning_3.add_plugin(TestBehavior(u'wiggle'))
    planning_3.add_plugin(TestBehavior(u'time'))
    # ----------------------------------------------
    publish_result = failure_is_success(Selector)(u'monitor execution')
    publish_result.add_child(TestBehavior(u'goal canceled'))
    publish_result.add_child(TestBehavior(u'send traj'))
    # ----------------------------------------------
    # ----------------------------------------------
    planning_2 = failure_is_success(Selector)(u'planning II')
    planning_2.add_child(TestBehavior(u'goal canceled'))
    planning_2.add_child(success_is_failure(TestBehavior)(u'visualization'))
    planning_2.add_child(success_is_failure(TestBehavior)(u'cpi marker'))
    planning_2.add_child(planning_3)
    # ----------------------------------------------
    move_robot = failure_is_success(Sequence)(u'move robot')
    move_robot.add_child(TestBehavior(u'execute?'))
    move_robot.add_child(publish_result)
    # ----------------------------------------------
    # ----------------------------------------------
    planning_1 = success_is_failure(Sequence)(u'planning I')
    planning_1.add_child(TestBehavior(u'update constraints'))
    planning_1.add_child(planning_2)
    # ----------------------------------------------
    # ----------------------------------------------
    process_move_goal = failure_is_success(Selector)(u'process move goal')
    process_move_goal.add_child(planning_1)
    process_move_goal.add_child(TestBehavior(u'set move goal'))
    # ----------------------------------------------
    #
    post_processing = failure_is_success(Sequence)(u'post processing')
    post_processing.add_child(TestBehavior(u'wiggle_cancel_final_detection'))
    post_processing.add_child(TestBehavior(u'post_processing'))
    # ----------------------------------------------
    # ----------------------------------------------
    root = Sequence(u'root')
    root.add_child(wait_for_goal)
    root.add_child(TestBehavior(u'cleanup'))
    root.add_child(process_move_goal)
    root.add_child(TestBehavior(u'plot trajectory'))
    root.add_child(post_processing)
    root.add_child(move_robot)
    root.add_child(TestBehavior(u'send result'))

    tree = BehaviourTree(root)
    return tree
예제 #2
0
파일: garden.py 프로젝트: ichumuh/giskardpy
def grow_tree():
    action_server_name = u'giskardpy/command'

    god_map = initialize_god_map()
    # ----------------------------------------------
    wait_for_goal = Sequence(u'wait for goal')
    wait_for_goal.add_child(TFPlugin(u'tf'))
    wait_for_goal.add_child(ConfigurationPlugin(u'js'))
    wait_for_goal.add_child(WorldUpdatePlugin(u'pybullet updater'))
    wait_for_goal.add_child(GoalReceived(u'has goal', action_server_name, MoveAction))
    wait_for_goal.add_child(ConfigurationPlugin(u'js'))
    # ----------------------------------------------
    planning_3 = PluginBehavior(u'planning III', sleep=0)
    planning_3.add_plugin(CollisionChecker(u'coll'))
    planning_3.add_plugin(ControllerPlugin(u'controller'))
    planning_3.add_plugin(KinSimPlugin(u'kin sim'))
    planning_3.add_plugin(LogTrajPlugin(u'log'))
    planning_3.add_plugin(GoalReachedPlugin(u'goal reached'))
    planning_3.add_plugin(WiggleCancel(u'wiggle'))
    planning_3.add_plugin(TimePlugin(u'time'))
    # ----------------------------------------------
    publish_result = failure_is_success(Selector)(u'monitor execution')
    publish_result.add_child(GoalCanceled(u'goal canceled', action_server_name))
    publish_result.add_child(SendTrajectory(u'send traj'))
    # ----------------------------------------------
    # ----------------------------------------------
    planning_2 = failure_is_success(Selector)(u'planning II')
    planning_2.add_child(GoalCanceled(u'goal canceled', action_server_name))
    # planning.add_child(CollisionCancel(u'in collision', collision_time_threshold))
    if god_map.safe_get_data(identifier.marker_visualization):
        planning_2.add_child(success_is_failure(VisualizationBehavior)(u'visualization'))
    if god_map.safe_get_data(identifier.enable_collision_marker):
        planning_2.add_child(success_is_failure(CPIMarker)(u'cpi marker'))
    planning_2.add_child(planning_3)
    # ----------------------------------------------
    move_robot = failure_is_success(Sequence)(u'move robot')
    move_robot.add_child(IF(u'execute?', identifier.execute))
    move_robot.add_child(publish_result)
    # ----------------------------------------------
    # ----------------------------------------------
    planning_1 = success_is_failure(Sequence)(u'planning I')
    planning_1.add_child(GoalToConstraints(u'update constraints', action_server_name))
    planning_1.add_child(planning_2)
    # ----------------------------------------------
    # ----------------------------------------------
    process_move_goal = failure_is_success(Selector)(u'process move goal')
    process_move_goal.add_child(planning_1)
    process_move_goal.add_child(SetCmd(u'set move goal', action_server_name))
    # ----------------------------------------------
    # ----------------------------------------------
    root = Sequence(u'root')
    root.add_child(wait_for_goal)
    root.add_child(CleanUp(u'cleanup'))
    root.add_child(process_move_goal)
    if god_map.safe_get_data(identifier.plot_trajectory):
        root.add_child(PlotTrajectory(u'plot trajectory'))
    root.add_child(move_robot)
    root.add_child(SendResult(u'send result', action_server_name, MoveAction))

    tree = BehaviourTree(root)

    if god_map.safe_get_data(identifier.debug):
        def post_tick(snapshot_visitor, behaviour_tree):
            logging.logdebug(u'\n' + py_trees.display.ascii_tree(behaviour_tree.root,
                                                                 snapshot_information=snapshot_visitor))

        snapshot_visitor = py_trees_ros.visitors.SnapshotVisitor()
        tree.add_post_tick_handler(functools.partial(post_tick, snapshot_visitor))
        tree.visitors.append(snapshot_visitor)
    path = god_map.safe_get_data(identifier.data_folder) + u'tree'
    create_path(path)
    render_dot_tree(root, name=path)

    tree.setup(30)
    return tree
예제 #3
0
def grow_tree():
    action_server_name = u'~command'

    god_map = initialize_god_map()
    # ----------------------------------------------
    wait_for_goal = Sequence(u'wait for goal')
    wait_for_goal.add_child(TFPlugin(u'tf'))
    wait_for_goal.add_child(ConfigurationPlugin(u'js1'))
    wait_for_goal.add_child(WorldUpdatePlugin(u'pybullet updater'))
    wait_for_goal.add_child(GoalReceived(u'has goal', action_server_name, MoveAction))
    wait_for_goal.add_child(ConfigurationPlugin(u'js2'))
    # ----------------------------------------------
    planning_3 = PluginBehavior(u'planning III', sleep=0)
    planning_3.add_plugin(CollisionChecker(u'coll'))
    # if god_map.safe_get_data(identifier.enable_collision_marker):
    #     planning_3.add_plugin(success_is_running(CPIMarker)(u'cpi marker'))
    planning_3.add_plugin(ControllerPlugin(u'controller'))
    planning_3.add_plugin(KinSimPlugin(u'kin sim'))
    planning_3.add_plugin(LogTrajPlugin(u'log'))
    planning_3.add_plugin(WiggleCancel(u'wiggle'))
    planning_3.add_plugin(LoopDetector(u'loop detector'))
    planning_3.add_plugin(GoalReachedPlugin(u'goal reached'))
    planning_3.add_plugin(TimePlugin(u'time'))
    # planning_3.add_plugin(MaxTrajLength(u'traj length check'))
    # ----------------------------------------------
    publish_result = failure_is_success(Selector)(u'monitor execution')
    publish_result.add_child(GoalCanceled(u'goal canceled', action_server_name))
    publish_result.add_child(SendTrajectory(u'send traj'))
    # ----------------------------------------------
    # ----------------------------------------------
    planning_2 = failure_is_success(Selector)(u'planning II')
    planning_2.add_child(GoalCanceled(u'goal canceled', action_server_name))
    if god_map.get_data(identifier.enable_VisualizationBehavior):
        planning_2.add_child(success_is_failure(VisualizationBehavior)(u'visualization'))
    if god_map.get_data(identifier.enable_WorldVisualizationBehavior):
        planning_2.add_child(success_is_failure(WorldVisualizationBehavior)(u'world_visualization'))
    if god_map.get_data(identifier.enable_CPIMarker):
        planning_2.add_child(success_is_failure(CollisionMarker)(u'cpi marker'))
    planning_2.add_child(planning_3)
    # ----------------------------------------------
    move_robot = failure_is_success(Sequence)(u'move robot')
    move_robot.add_child(IF(u'execute?', identifier.execute))
    move_robot.add_child(publish_result)
    # ----------------------------------------------
    # ----------------------------------------------
    planning_1 = Sequence(u'planning I')
    planning_1.add_child(GoalToConstraints(u'update constraints', action_server_name))
    planning_1.add_child(planning_2)
    planning_1.add_child(running_is_success(TimePlugin)(u'time for zero velocity'))
    planning_1.add_child(AppendZeroVelocity(u'append zero velocity'))
    planning_1.add_child(running_is_success(LogTrajPlugin)(u'log zero velocity'))
    # planning_1.add_child(running_is_success(TimePlugin)(u'time for zero velocity'))
    # planning_1.add_child(AppendZeroVelocity(u'append zero velocity'))
    # planning_1.add_child(running_is_success(LogTrajPlugin)(u'log zero velocity'))
    if god_map.get_data(identifier.enable_VisualizationBehavior):
        planning_1.add_child(VisualizationBehavior(u'visualization', ensure_publish=True))
    if god_map.get_data(identifier.enable_WorldVisualizationBehavior):
        planning_1.add_child(WorldVisualizationBehavior(u'world_visualization', ensure_publish=True))
    if god_map.get_data(identifier.enable_CPIMarker):
        planning_1.add_child(CollisionMarker(u'cpi marker'))
    # ----------------------------------------------
    post_processing = failure_is_success(Sequence)(u'post planning')
    # post_processing.add_child(WiggleCancel(u'final wiggle detection', final_detection=True))
    if god_map.get_data(identifier.enable_PlotTrajectory):
        post_processing.add_child(PlotTrajectory(u'plot trajectory', order=3))
    post_processing.add_child(PostProcessing(u'evaluate result'))
    # post_processing.add_child(PostProcessing(u'check reachability'))
    # ----------------------------------------------
    planning = success_is_failure(Sequence)(u'planning')
    planning.add_child(IF(u'goal_set?', identifier.next_move_goal))
    planning.add_child(planning_1)
    planning.add_child(post_processing)

    process_move_goal = failure_is_success(Selector)(u'process move goal')
    process_move_goal.add_child(planning)
    # process_move_goal.add_child(planning_1)
    # process_move_goal.add_child(post_processing)
    process_move_goal.add_child(SetCmd(u'set move goal', action_server_name))
    # ----------------------------------------------
    #
    # post_processing = failure_is_success(Sequence)(u'post processing')
    # post_processing.add_child(PostProcessing(u'post_processing'))

    # ----------------------------------------------
    # ----------------------------------------------
    root = Sequence(u'root')
    root.add_child(wait_for_goal)
    root.add_child(CleanUp(u'cleanup'))
    root.add_child(process_move_goal)
    root.add_child(move_robot)
    root.add_child(SendResult(u'send result', action_server_name, MoveAction))

    tree = BehaviourTree(root)

    if god_map.get_data(identifier.debug):
        def post_tick(snapshot_visitor, behaviour_tree):
            logging.logdebug(u'\n' + py_trees.display.ascii_tree(behaviour_tree.root,
                                                                 snapshot_information=snapshot_visitor))

        snapshot_visitor = py_trees_ros.visitors.SnapshotVisitor()
        tree.add_post_tick_handler(functools.partial(post_tick, snapshot_visitor))
        tree.visitors.append(snapshot_visitor)
    path = god_map.get_data(identifier.data_folder) + u'tree'
    create_path(path)
    render_dot_tree(root, name=path)

    tree.setup(30)
    tree_m = TreeManager(tree)
    god_map.set_data(identifier.tree_manager, tree_m)
    return tree