def default_action(self): """ Apply rotation to the platine unit """ # Reset movement variables ry, rz = 0.0, 0.0 if self._is_manual_mode: return try: normal_speed = self._speed / self.frequency # For the moment ignoring the division by zero # It happens apparently when the simulation starts except ZeroDivisionError: pass self._current_pan = self._pan_orientation.to_euler().z self._current_tilt = self._tilt_orientation.to_euler().y logger.debug("PTU: pan=%.4f, tilt=%.4f" % (self._current_pan, self._current_tilt)) # Get the angles in a range of -PI, PI target_pan = normalise_angle(self.local_data['pan']) target_tilt = normalise_angle(self.local_data['tilt']) logger.debug("Targets: pan=%.4f, tilt=%.4f" % (target_pan, target_tilt)) if (abs(target_pan - self._current_pan) < self._tolerance and abs(target_tilt - self._current_tilt) < self._tolerance): self.completed(status.SUCCESS) # Determine the direction of the rotation, if any ry = rotation_direction(self._current_tilt, target_tilt, self._tolerance, normal_speed) rz = rotation_direction(self._current_pan, target_pan, self._tolerance, normal_speed) # Give the rotation instructions directly to the parent # The second parameter specifies a "local" movement self._pan_base.applyRotation([0.0, 0.0, rz], True) self._tilt_base.applyRotation([0.0, ry, 0.0], True)
def default_action(self): """ Apply rotation to the arm segments """ # Get the reference to the Sound actuator if self._sound == None: logger.debug ("ACTIVATING THE SOUND ACTUATOR") contr = blenderapi.controller() self._sound = contr.actuators['Sound'] contr.activate(self._sound) self._sound.stopSound() # Reset movement variables rx, ry, rz = 0.0, 0.0, 0.0 # Scale the speeds to the time used by Blender try: rotation = self._speed / self.frequency # For the moment ignoring the division by zero # It happens apparently when the simulation starts except ZeroDivisionError: pass self._moving = False for i in range(6): key = ('seg%d' % i) target_angle = normalise_angle(self.local_data[key]) # Get the next segment segment = self._segments[i] # Extract the angles rot_matrix = segment.localOrientation segment_matrix = mathutils.Matrix((rot_matrix[0], rot_matrix[1], rot_matrix[2])) segment_euler = segment_matrix.to_euler() # Use the corresponding direction for each rotation if self._dofs[i] == 'y': ry = rotation_direction(segment_euler[1], target_angle, self._tolerance, rotation) #logger.debug("PARAMETERS Y: %.4f, %.4f, %.4f, %.4f = %.4f" % (segment_euler[1], target_angle, _tolerance, rotation, ry)) elif self._dofs[i] == 'z': rz = rotation_direction(segment_euler[2], target_angle, self._tolerance, rotation) #logger.debug("PARAMETERS Z: %.4f, %.4f, %.4f, %.4f = %.4f" % (segment_euler[2], target_angle, _tolerance, rotation, rz)) logger.debug("ry = %.4f, rz = %.4f" % (ry, rz)) # Give the movement instructions directly to the parent # The second parameter specifies a "local" movement segment.applyRotation([rx, ry, rz], True) if ry != 0.0 or rz != 0.0: self._moving = True # Reset the rotations for the next segment ry = rz = 0 if self._moving: self._sound.startSound() logger.debug("STARTING SOUND") else: self._sound.stopSound() logger.debug("STOPPING SOUND")
def default_action(self): """ Apply rotation to the arm segments """ # Get the reference to the Sound actuator if self._sound is None: logger.debug ("ACTIVATING THE SOUND ACTUATOR") contr = blenderapi.controller() self._sound = contr.actuators['Sound'] contr.activate(self._sound) self._sound.stopSound() # Reset movement variables rx, ry, rz = 0.0, 0.0, 0.0 # Scale the speeds to the time used by Blender try: rotation = self._speed / self.frequency # For the moment ignoring the division by zero # It happens apparently when the simulation starts except ZeroDivisionError: pass self._moving = False for i in range(6): key = ('seg%d' % i) target_angle = normalise_angle(self.local_data[key]) # Get the next segment segment = self._segments[i] # Extract the angles rot_matrix = segment.localOrientation segment_matrix = mathutils.Matrix((rot_matrix[0], rot_matrix[1], rot_matrix[2])) segment_euler = segment_matrix.to_euler() # Use the corresponding direction for each rotation if self._dofs[i] == 'y': ry = rotation_direction(segment_euler[1], target_angle, self._tolerance, rotation) #logger.debug("PARAMETERS Y: %.4f, %.4f, %.4f, %.4f = %.4f" % (segment_euler[1], target_angle, _tolerance, rotation, ry)) elif self._dofs[i] == 'z': rz = rotation_direction(segment_euler[2], target_angle, self._tolerance, rotation) #logger.debug("PARAMETERS Z: %.4f, %.4f, %.4f, %.4f = %.4f" % (segment_euler[2], target_angle, _tolerance, rotation, rz)) logger.debug("ry = %.4f, rz = %.4f" % (ry, rz)) # Give the movement instructions directly to the parent # The second parameter specifies a "local" movement segment.applyRotation([rx, ry, rz], True) if ry != 0.0 or rz != 0.0: self._moving = True # Reset the rotations for the next segment ry = rz = 0 if self._moving: self._sound.startSound() logger.debug("STARTING SOUND") else: self._sound.stopSound() logger.debug("STOPPING SOUND")