def __init__(self): self.tracker = Tango_tracker() self.logger = rospy.Publisher('/log', String, queue_size=10) self.forward_distance_pub = rospy.Publisher('/forward_distance', Float64, queue_size=10) self.right_distance_pub = rospy.Publisher('/right_distance', Float64, queue_size=10) # New topics for Tango to publish sound info to: self.sound_pub=rospy.Publisher('/sound_info', Sound, queue_size=10) self.rospack = rospkg.RosPack(); self.path = self.rospack.get_path('eye_helper') + '/../GeneratedSoundFiles/' # Stuff for Tango coord use: self.player = 'aplay' self.playback_interval = rospy.Duration(0.2) self.last_tone = rospy.Time.now() # All initialized as None but defined in play_audio(): self.sound_info = None
class TangoPoseCalc(): """ Calculate relative locations w/ Tango """ def __init__(self): self.tracker = Tango_tracker() self.logger = rospy.Publisher('/log', String, queue_size=10) self.forward_distance_pub = rospy.Publisher('/forward_distance', Float64, queue_size=10) self.right_distance_pub = rospy.Publisher('/right_distance', Float64, queue_size=10) # New topics for Tango to publish sound info to: self.sound_pub=rospy.Publisher('/sound_info', Sound, queue_size=10) self.rospack = rospkg.RosPack(); self.path = self.rospack.get_path('eye_helper') + '/../GeneratedSoundFiles/' # Stuff for Tango coord use: self.player = 'aplay' self.playback_interval = rospy.Duration(0.2) self.last_tone = rospy.Time.now() # All initialized as None but defined in play_audio(): self.sound_info = None # def play_wave(self, volume, mix): # """ # plays an inputted wav file # """ # self.logger.publish(String(data="played audio file %s at volume %f" % (self.filename, volume))) # cmd = 'amixer set Master {}'.format(volume) # print cmd # popen = subprocess.Popen(cmd, shell=True) # popen.communicate() # if mix != None: # # need to scale this by volume as a percentage.... TODO # cmd = 'amixer sset Headphone {}%,{}%'.format(mix[0],mix[1]) # popen = subprocess.Popen(cmd, shell=True) # popen.communicate() # # print self.filename # cmd = '{} {}'.format(self.player, self.filename) # popen = subprocess.Popen(cmd, shell=True) # popen.communicate() def adjust_playback_interval(self,d): if d != None: self.playback_interval = rospy.Duration(d/2.0) def play_audio(self): """ Uses class variables; plays the corresponding sound file. Edit: Angle_to_volume part is commented out. Instead, new lines of code added for y_to_volume to adjust volume according to y-distance. -pdemetci """ self.tracker.refresh_all() d = self.tracker.forward_distance eh.adjust_playback_interval(d) self.forward_distance_pub.publish(Float64(self.tracker.forward_distance)) self.right_distance_pub.publish(Float64(self.tracker.right_distance)) #print self.tracker.xy_distance print self.tracker.yaw, self.tracker.forward_distance, self.tracker.right_distance # print self.playback_interval print rospy.Time.now(), self.last_tone, self.playback_interval if rospy.Time.now() - self.last_tone < self.playback_interval: return self.last_tone = rospy.Time.now() print "playing audio" if d == None: return else: #relative_z = self.target_z - self.z ###Code for left-right mix: if self.tracker.right_distance < -0.03: desired_mix = ['100','0'] elif self.tracker.right_distance<0.03 or self.tracker.right_distance> -0.03 : desired_mix = ['50','50'] else: desired_mix = ['0','100'] ### Code for playing volume based on y-distance (instead of yaw)### relative_y = abs(self.tracker.right_distance) if relative_y == 1.2 or relative_y > 1.2: relative_y = 1.2 elif relative_y >= 1.1 or relative_y < 1.2: relative_y=1.1 elif relative_y >= 1.0 or relative_y < 1.1: relative_y=1.0 elif relative_y >= 0.9 or relative_y < 1.0: relative_y=0.9 elif relative_y >= 0.8 or relative_y < 0.9: relative_y=0.8 elif relative_y >= 0.7 or relative_y < 0.8: relative_y=0.7 elif relative_y >= 0.6 or relative_y < 0.7: relative_y=0.6 elif relative_y >= 0.5 or relative_y < 0.6: relative_y=0.5 elif relative_y >= 0.4 or relative_y < 0.5: relative_y=0.4 elif relative_y >= 0.3 or relative_y < 0.4: relative_y=0.3 elif relative_y >= 0.2 or relative_y < 0.3: relative_y=0.2 else: relative_y=0.0 possible_y=[0.0, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2] possible_volume=[20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75] #Just because I did not have any audio files where volume>31. Can be commented out/deleted once we create such files y_to_volume={} for i in range(len(possible_y)): y_to_volume[possible_y[i]]=possible_volume[i] desired_volume=y_to_volume[relative_y] self.filename="{}height4angle15.wav".format(self.path) desired_volume*=4 print "desired volume", type(desired_volume) # self.play_wave(desired_volume, desired_mix) self.sound_info= Sound(file_path=self.filename,volume=float(desired_volume),mix_left=float(desired_mix[0]),mix_right=float(desired_mix[1]) ) self.sound_pub.publish(self.sound_info)
self.filename= "You_arrived" self.audio_play() rospy.sleep(10) return point_msg = PointStamped(header=Header(frame_id="odom", stamp=self.tracker.pose_timestamp), point=Point(x=trail[-1][0],y=trail[-1][1],z=trail[-1][2])) print (trail[-1][0],trail[-1][1],trail[-1][2]) self.tracker.target_x=trail[-1][0] self.tracker.target_y=trail[-1][1] self.tracker.target_z=trail[-1][2] self.pub.publish(point_msg) self.tracker.refresh_all() trail.remove(trail[-1]) print self.tracker.xy_distance def audio_play(self): p = subprocess.Popen('amixer -D pulse sset Master 30%', shell=True) p.communicate() self.path = self.filepath + self.filename print self.path p = subprocess.Popen('{} {}.wav'.format(self.player, self.path), shell=True) p.communicate() if __name__ == "__main__": tt = Tango_tracker('tango_tracker2') lm=Landmark(tracker=tt) r = rospy.Rate(5) # 5hz while not rospy.is_shutdown(): tt.refresh_all() lm.run() r.sleep()