def accUpdate(self): """vérifie la position du robot toute les dt secondes et en déduit la vitesse et l'acceleration du robot selon les 3 axes X Y Z""" self.start() while (self.state): if (not self.state): break a = self.position va = self.vitesseVectorielle time.sleep(self.dt) b = self.position vb = self.vitesseVectorielle dx = fabs(b.x - a.x) dy = fabs(b.y - a.y) dz = fabs(b.z - a.z) self.vitesseVectorielle = Vecteur(dx / self.dt, dy / self.dt, dz / self.dt) vx = vb.x - va.x vy = vb.y - va.y vz = vb.z - va.z self.accelerationVectorielle = Vecteur(vx / self.dt, vy / self.dt, vz / self.dt)
def __init__(self, position, direction): """position doit etre initialisé a la position du robot ! (qui est constament mise a jour lors du déplacement) type est un string pour distinguer l'accelero des autres capteurs state est un booleen qui represente l'etat du capteur on/off""" Capteur.__init__(position, direction) self.state = True self.dt = 0.1 self.vitesseVectorielle = Vecteur(0, 0, 0) self.accelerationVectorielle = Vecteur(0, 0, 0)
def devant(self, point): """cette méthode retroune True si la projection sur OXY d'un point est devant le capteur retroune False sinon """ vecttemp = Vecteur(point.x - self.position.x, point.y - self.position.y, 0) return self.direction * vecttemp > 0
def __init__(self, pave, rg=Objet3D(), rd=Objet3D(), direction=Vecteur(1, 0, 0), vitesserot=0.01, vitesse=5.0): """ Constructeur du robot direction: Vecteur norme montrant la direction initiale du robot forme: Pave attendu (correspond aux methodes de deplacement) rd: Objet3D, roue droite rg: Objet3D, roue gauche """ Objet3D.__init__(self) self.direction = direction self.vitesse = vitesse self.vitesseRot = vitesserot self.forme = pave self.centre = pave.centre.clone( ) # initalise le centre au centre du pave self.rd = rd self.rg = rg # initialisation des centres des roues self.rd.centre = pave.sommets[1] / 2 self.rg.centre = pave.sommets[0] / 2
def creerArene(): """ renvoi une arene avec quelques objets: ici juste un pave """ arene = Arene() global pave pave = Pave(50, 50, 0) pave.deplacer(Vecteur(50, 50, 0)) # Le robot doit avoir une position nulle au depart pour etre a (50,50) arene.add(pave) return arene
def clavier(event): """ q, d : tourner z, s : avancer/reculer """ effacer() pasRotation = pi / 100 global pave global vueArene global Canevas touche = event.keysym if touche == 'z': pave.deplacer(Vecteur(0, -1, 0)) if touche == 's': pave.deplacer(Vecteur(0, 1, 0)) if touche == 'q': pave.tourner(-pasRotation) if touche == 'd': pave.tourner(pasRotation) vueArene.afficher(Canevas)
def __init__(self, pave, rg=Objet3D(), rd=Objet3D(), direction=Vecteur(1, 0, 0)): """ :param pave: forme du robot, a priori Pave :param rg: roue droite :param rd: roue gauche :param direction: direction du robot """ RobotAutonome.__init__(self, pave, rg, rd, direction) self.tete = Tete( self ) # la tete est exactement au centre du robot, elle est oriente comme le vecteur direction
def setUp(self): self.r = Robot(Pave(50, 50, 0), Objet3D(), Objet3D(), Vecteur(0, -1, 0))