Exemple #1
0
    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            Debug.Log("Planning");
            DStartState     = new BestFirstState(startObject.transform.position) as DefaultState;
            DGoalState      = new BestFirstState(goalObject.transform.position) as DefaultState;
            planner.oneStep = false;
            planner.computePlan(ref DStartState, ref DGoalState, ref outputPlan, 10.0f);
        }

        if (Input.GetKeyDown(KeyCode.S))
        {
            Debug.Log("Planning");
            DStartState     = new BestFirstState(startObject.transform.position) as DefaultState;
            DGoalState      = new BestFirstState(goalObject.transform.position) as DefaultState;
            planner.oneStep = true;
            planner.computePlan(ref DStartState, ref DGoalState, ref outputPlan, 10.0f);
        }

        if (Input.GetKeyDown(KeyCode.Z))
        {
            showOpen = !showOpen;
        }

        if (Input.GetKeyDown(KeyCode.X))
        {
            showVisited = !showVisited;
        }
    }
Exemple #2
0
    private void ComputeTunnelSearch()
    {
        gridTimeDomain.UseTunnelSearch(tunnel);


        DefaultState defStartState = startState as DefaultState;
        DefaultState defLastState  = lastState as DefaultState;

        newPlan     = new Stack <DefaultAction>();
        goalReached = tunnelPlanner.computePlan(ref defStartState, ref defLastState, ref newPlan, maxTime);

        gridTimeDomain.DisableTunnelSearch();
    }
Exemple #3
0
    // Use this for initialization
    void Start()
    {
        planner = new ARAstarPlanner();
        BestFirstPlanner = new BestFirstSearchPlanner();

        GetComponent<NeighbourObstacles>().Init ();

        GridTimeDomain domain = new GridTimeDomain(GetComponent<NeighbourObstacles>(), GetComponent<NeighbourAgents>());
        List<PlanningDomainBase> dl = new List<PlanningDomainBase>();
        dl.Add(domain);

        DefaultState startState = new GridTimeState(transform.position) as DefaultState;
        DefaultState goalState = new GridTimeState(new Vector3(5,0.5f,0),5.0f)  as DefaultState;
        plan = new Dictionary<DefaultState, ARAstarNode>();
        outputPlan = new Stack<DefaultState>();

        if(BestFirstSearchPlanner) {
            BestFirstPlanner.init(ref dl, 200);
            bool completed = BestFirstPlanner.computePlan(ref startState, ref goalState, ref outputPlan, 10.0f);
            Debug.Log("BestFirst Plan " + outputPlan.Count);
            Debug.Log("Plan found: " + completed);

        } else {
            planner.init(ref dl,200);
            float inflationFactor = 2.5f;
            PathStatus status = planner.computePlan(ref startState ,ref goalState ,ref plan,ref inflationFactor, 10.0f);
            planner.FillPlan();
            Debug.Log ("ARA Plan " + plan.Count);
            Debug.Log("Nodes Expanded: " + planner.Close.Elements().Count);
            Debug.Log("Status: " + status);
        }
    }
Exemple #4
0
    // Use this for initialization
    void Start()
    {
        planner          = new ARAstarPlanner();
        BestFirstPlanner = new BestFirstSearchPlanner();

        GetComponent <NeighbourObstacles>().Init();

        GridTimeDomain            domain = new GridTimeDomain(GetComponent <NeighbourObstacles>(), GetComponent <NeighbourAgents>());
        List <PlanningDomainBase> dl     = new List <PlanningDomainBase>();

        dl.Add(domain);



        DefaultState startState = new GridTimeState(transform.position) as DefaultState;
        DefaultState goalState  = new GridTimeState(new Vector3(5, 0.5f, 0), 5.0f)  as DefaultState;

        plan       = new Dictionary <DefaultState, ARAstarNode>();
        outputPlan = new Stack <DefaultState>();

        if (BestFirstSearchPlanner)
        {
            BestFirstPlanner.init(ref dl, 200);
            bool completed = BestFirstPlanner.computePlan(ref startState, ref goalState, ref outputPlan, 10.0f);
            Debug.Log("BestFirst Plan " + outputPlan.Count);
            Debug.Log("Plan found: " + completed);
        }
        else
        {
            planner.init(ref dl, 200);
            float      inflationFactor = 2.5f;
            PathStatus status          = planner.computePlan(ref startState, ref goalState, ref plan, ref inflationFactor, 10.0f);
            planner.FillPlan();
            Debug.Log("ARA Plan " + plan.Count);
            Debug.Log("Nodes Expanded: " + planner.Close.Elements().Count);
            Debug.Log("Status: " + status);
        }
    }
    public override bool ComputePlan()
    {
        bool stateWasNull = false;

        if (currentState == null)
        {
            currentState = InitState();
            stateWasNull = true;
        }

        goalState = new FootstepPlanningState(currentGoal, Quaternion.identity, goalTime);

        outputPlan = new Stack <DefaultAction>();

        if (stateWasNull || goalReached && !stateWasNull)
        {
            if (currentState.previousState != null)
            {
                float actionLength = currentState.time - currentState.previousState.time;
                currentState.previousState.time = Time.time - actionLength;
            }
            currentState.time = Time.time;
        }

        DefaultState DcurrentState = currentState as DefaultState;
        DefaultState DgoalState    = goalState as DefaultState;


        if (useGridDomain)
        {
            GridPlanningState currentGridState = new GridPlanningState(root.position);
            DcurrentState = currentGridState as DefaultState;

            GridPlanningState goalGridState = new GridPlanningState(currentGoal);
            DgoalState = goalGridState as DefaultState;
        }


        if (useGridTimeDomain)
        {
            GridTimeState currentTimeState = new GridTimeState(root.position, Time.time, currentSpeed);
            DcurrentState = currentTimeState as DefaultState;

            GridTimeState goalTimeState = new GridTimeState(currentGoal, goalTime);
            DgoalState = goalTimeState as DefaultState;

            //Debug.Log("current time = " + currentTimeState.time);
        }

        //float startTime = Time.realtimeSinceStartup;

        bool planComputed = planner.computePlan(ref DcurrentState, ref DgoalState, ref outputPlan, maxTime);

        /*************************/
        /* TUNNEL SEARCH TESTING */
        //List<Vector3> movDirections = (domainList[0] as GridPlanningDomain).getMovDirections();
        //TunnelSearch tunnelSearch = new TunnelSearch(outputPlan, 3, analyzer, movDirections);

        if (TunnelSearch)
        {
            if (planComputed)
            {
                GridTunnelSearch gridTunnelSearch = new GridTunnelSearch(outputPlan, root.position,
                                                                         Time.time, goalState.time, gtd,
                                                                         MaxNumberOfNodes, maxTime,
                                                                         //tunnelThresholdX, tunnelThresholdZ, tunnelThresholdT);
                                                                         tunnelThresholdD, tunnelThresholdT,
                                                                         currentSpeed);

                outputPlanBeforeTunnel = outputPlan;
                outputPlan             = gridTunnelSearch.newPlan;

                planComputed = gridTunnelSearch.goalReached;

                //Debug.Log("At time " + Time.time + " tunnel plan computed? " + planComputed);
            }
        }
        /*************************/

        /*
         * float endTime = Time.realtimeSinceStartup;
         *
         * timeSum += (endTime - startTime);
         * numCalls++;
         *
         * float meanTime = 0.0f;
         * if (numCalls == 100)
         * {
         *      meanTime = timeSum / numCalls;
         *      Debug.Log("At time " + Time.time + " Mean Computing Plan Time = " + meanTime);
         *      numCalls = 0;
         *      timeSum = 0;
         * }
         */

        if (goalMeshRenderer != null && goalStateTransform.position == currentGoal)
        {
            if (planComputed && goalCompletedMaterial != null)
            {
                goalMeshRenderer.material = goalCompletedMaterial;
            }
            else
            {
                goalMeshRenderer.material = goalMaterial;
            }
        }

        //Debug.Log("new plan! at time: " + Time.time + " with " + outputPlan.Count + " actions");



        goalReached = false;

        /*
         * if (planComputed)
         * {
         *      AnimationCurve[] curves = GetPlanAnimationCurve();
         *      curveX = curves[0];
         *      curveY = curves[1];
         *      curveZ = curves[2];
         * }
         */

        return(planComputed && outputPlan.Count > 0);
    }