sabbio93 / QRobotEvitaMuri

Risoluzione del problema: https://137.204.107.21/syskb/it.unibo.iss2015intro/docs/Material/TemaFinaleLMBO2017.html
MIT License
2 stars 0 forks source link

Rover parte senza cmd(start) in presenza di ostacolo mobile #60

Open quellobiondo opened 7 years ago

quellobiondo commented 7 years ago

Se il rover è fermo, senza avere ricevuto l'evento cmd(start) può partire ugualmente se davanti a lui è passato un ostacolo mobile.

bug rover mind

La causa è:

    // mi è arrivato un evento dai sonar, cerco di capire cosa è stato rilevato, o reagisco di conseguenza
    Plan aspettaEventi
        println("in ascolto");
        sense time(600000) robotLeave, robotDetected, cmd, ostacolo -> continue, continue, continue, continue;
        printCurrentEvent;

        //il rover è davanti al sonar a ed ho ricevuto il comando start
        [!? davanti(sonara,rover)] onEvent cmd:cmd(start) -> forward rover -m comando:comando(start); 
        [!? davanti(sonara,rover)] println(davanti(sonara,rover)); 

        //modifico la mia conoscenza interna sulla posizione del rover rispetto ai sonar
        [!? davanti(sonara,rover)] onEvent robotLeave:robotLeave(sonara) -> removeRule davanti(sonara,rover)
                           else onEvent robotDetected:robotDetected(sonara,D) -> demo salvaDistanzaIniziale(D);
        [!? value(distanzaIniziale,Di)] println(debug(value(distanzaIniziale, Di)));

        onEvent ostacolo:ostacolo -> switchToPlan valutaOstacolo; // <- nope, causa il BUG
        ...
                repeatPlan  

Plan valutaOstacolo resumeLastPlan
        delay time(2000);
        sense time(500) ostacolo -> continue;
        [!? tout(senseevent,QA)] forward rover -m comando:comando(start); <- nope nope nope BUG
        [?? tout(senseevent,QA)] endPlan "";
        onEvent ostacolo : ostacolo -> println("Ostacolo fisso");
        onEvent ostacolo : ostacolo -> endQActor "Incontrato un ostacolo fisso" //In realt� nell'attuale implementazione di qactor non termina

Il rover appena viene attivato inizia a mandare eventi del tipo "ostacolo:ostacolo" se rileva qualcosa troppo vicino.

è sbagliato che la robot mind, se non è durante la traversata, alla percezione di obstacle valuti l'ostacolo e riparta

quellobiondo commented 7 years ago

A mio parere la robot mind dovrebbe dire al rover fisico di "riprendere ciò che stava facendo", non il comando start...

quellobiondo commented 7 years ago

Un'idea potrebbe essere quella di: