En regardant comme ça (depuis mon tel), je ne vois pas d'erreurs de syntaxe.djo074 a écrit : ↑05 avr. 2019, 16:45Bonjour à tous,
Après de nombreuses relectures de mon bloc code, je n'arrive toujours pas a trouver mon erreur, qui fait que mon robot, décolle de la base, mais après 2 sec déclare qu'il a aspiré la zone et se remet sur sa base. les coordonnées du code ne sont pas non plus remontées au virtuel pour affichage.
Je vous soumet mon code pour qu'une âme charitable et surtout plus douée que moi y jette un oeil!
Merci
Djo.
Code : Tout sélectionner
//SCRIPT de contournement des problemes de rotations de cartes //définition des zones (CleanZone) et des positions sur la carte (GoThere) : $coordonnees = array(); $coordonnees['NULL'][] = ""; $coordonnees['SEJOUR'][] = "20700, 25000, 25900, 30900, 1"; $coordonnees['TABLE_MANGER'][] = "22500, 28500, 25900, 30900, 1"; $coordonnees['SDB'][] = "18000, 25000, 19700, 28800, 1"; $coordonnees['CUISINE'][] = "21900, 31300, 24500, 34700, 1"; $coordonnees['CHAMBRE'][] = "17850, 32350, 20500, 35500, 1"; // zones regroupements plusieures autres zones : $coordonnees['REPAS'][] = $coordonnees['TABLE_MANGER'][0]; $coordonnees['REPAS'][] = $coordonnees['CUISINE'][0]; $coordonnees['APPARTEMENT_SANS_CHAMBRE'][] = $coordonnees['SEJOUR'][0]; $coordonnees['APPARTEMENT_SANS_CHAMBRE'][] = $coordonnees['SDB'][0]; $coordonnees['APPARTEMENT_SANS_CHAMBRE'][] = $coordonnees['CUISINE'][0]; $coordonnees['APPARTEMENT_FULL'][] = $coordonnees['SEJOUR'][0]; $coordonnees['APPARTEMENT_FULL'][] = $coordonnees['SDB'][0]; $coordonnees['APPARTEMENT_FULL'][] = $coordonnees['CUISINE'][0]; $coordonnees['APPARTEMENT_FULL'][] = $coordonnees['CHAMBRE'][0]; /*NE PAS MODIFIER DESSOUS*/ // Récupération des parametres stockés dans le virtuel: //rotation relative de la carte == 0 lors de la création initiale des zones $cmd = cmd::byString("#[Informatique][Aspirateur_clean_zones][rotation_map]#"); $rotation = $cmd->execCmd(); // centre X de la carte : $cmd = cmd::byString("#[Informatique][Aspirateur_clean_zones][centre_x]#"); $centre_x = $cmd->execCmd(); // centre Y de la carte : $cmd = cmd::byString("#[Informatique][Aspirateur_clean_zones][centre_y]#"); $centre_y = $cmd->execCmd(); $centre = array($centre_x,$centre_y); // centre X,Y de la carte (25000,25000) function rotate($x,$y,$angle,$centre) { if($angle ==0) { //ajustement facultatif du centre par défaut en cas de léger déplacement de la base : //$x = $x - 80; //$y = $y + 80; return array($x,$y); } $angle *= M_PI / 180; $xM = $x - $centre[0]; $yM = $y - $centre[1]; $x = $xM * cos($angle) + $yM * sin($angle) + $centre[0]; $y = - $xM * sin($angle) + $yM * cos($angle) + $centre[1]; return array(round($x), round($y)); } function generer($coordonnees,$quoi,$rotation,$centre) { if(count($coordonnees[$quoi])<1) return "AUCUN"; $zonedef=array(); foreach($coordonnees[$quoi] as $lazone) { //pour chaque zone $zone=explode(',', $lazone); $coord=array(); list($xa , $ya) = rotate($zone[0].$zone[1],$rotation,$centre); //renvoi position début array(x,y) if($zone[2] > 0) { //cleanZone list($xb , $yb) = rotate($zone[2],$zone[3],$rotation,$centre); //renvoi position fin array(x,y) if($xa < $xb) { $coord[0] = $xa; $coord[1] = 0; $coord[2] = $xb; } else{ $coord[0] = $xb; $coord[1] = 0; $coord[2] = $xa; } if($ya < $yb) { $coord[1] = $ya; $coord[3] = $yb; } else{ $coord[1] = $yb; $coord[3] = $ya; } $coord[4] = $zone[4]; $zonedef[] = '['.implode(',',$coord).']'; } else{ //GoThere $zonedef[] = $xa . "," . $ya; } } return implode(',',$zonedef); } $cmd = cmd::byString("#[Informatique][Aspirateur_clean_zones][ordre]#"); $job = $cmd->execCmd(); //contient le nom de la zone ou position demandée (tel que défini dans le tableau) // on génere les coordonnées corrigées : $newpos = generer($coordonnees,$job,$rotation,$centre); // et on sauve ces coordonnées dans notre virtuel (pour qu'elles soient exploitables hors de notre bloc de code) $cmd = cmd::byString("#[Informatique][Aspirateur_clean_zones][coordonnees]#"); $cmd->event($newpos); //FIN DU SCRIPT
Je pencherai plutôt pour une erreur sur le virtuel ou son appel...
car ton symptôme laisse penser que les positions ne sont pas envoyées à l'aspirateur...
Tu pourrais nous faire voir tes commandes action et infos du Virtuel ?
Je soupçonne que le problème vient de là...