def main(): # Get parameters bundle_topic = rospy.get_param('~bundle_topic', '/bc/bundle') src_bag_path = rospy.get_param('~source_bag_path', None) backchannel_topic = rospy.get_param('~backchannel_topic', '/bc/backchannels') sink_bag_path = rospy.get_param('~sink_bag_path', None) # Instantiate source if src_bag_path: bundle_source = BagSource(src_bag_path, bundle_topic) else: bundle_source = TopicSource(bundle_topic, Bundle) # Instantiate sinks if sink_bag_path: bag = rosbag.Bag(sink_bag_path, 'w') backchannel_sink = BagSink(bag, backchannel_topic, Backchannel) else: bag = None backchannel_sink = TopicSink(backchannel_topic, Backchannel) with conditional(bag, bag): with bundle_source, backchannel_sink: for msg, t in bundle_source: if random.random() > 0.2: backchannel_msg = Backchannel() backchannel_msg.header.stamp = t pids = [1,2,3] to_pid = random.choice(pids) pids.remove(to_pid) from_pid = random.choice(pids) backchannel_msg.to_pid = to_pid backchannel_msg.from_pid = from_pid backchannel_sink.put(backchannel_msg, t)
def get_configuration(): # Get topic parameters from each camera gaze_topic_camera1 = rospy.get_param('gaze_topic_1', '/camera1/face_info') gaze_topic_camera2 = rospy.get_param('gaze_topic_2', '/camera2/face_info') gaze_topic_camera3 = rospy.get_param('gaze_topic_3', '/camera3/face_info') # get broadcasted start time and window duration start_time_topic = rospy.get_param('start_time_topic', '/bc/start_time') window_duration_topic = rospy.get_param('window_duration_topic', '/bc/window_duration') #create a features topic for publishing the combined nod message features_topic = rospy.get_param('features_topic', '/bc/gaze_features') # Get source, sink parameters src_bag_path = rospy.get_param('source_bag_path', None) sink_bag_path = rospy.get_param('sink_bag_path', None) # Instantiate sources if src_bag_path: gaze_src_1 = BagSource(src_bag_path, gaze_topic_camera1) gaze_src_2 = BagSource(src_bag_path, gaze_topic_camera2) gaze_src_3 = BagSource(src_bag_path, gaze_topic_camera3) start_time_src = BagSource(src_bag_path, start_time_topic) window_duration_src = BagSource(src_bag_path, window_duration_topic) else: gaze_src_1 = TopicSource(gaze_topic_camera1, face_info) gaze_src_2 = TopicSource(gaze_topic_camera2, face_info) gaze_src_3 = TopicSource(gaze_topic_camera3, face_info) start_time_src = TopicSource(start_time_topic, Time) window_duration_src = TopicSource(window_duration_topic, Int32) # Instantiate sinks if sink_bag_path: bag = rosbag.Bag(sink_bag_path, 'w') features_sink = BagSink(bag, features_topic, GazeFeatures) else: bag = None features_sink = TopicSink(features_topic, GazeFeatures) # Get the start time rospy.loginfo('Finding start time, window duration.') with start_time_src: msg, _ = next(start_time_src) start_time = msg.data # Get the window duration with window_duration_src: msg, _ = next(window_duration_src) window_duration = rospy.Duration(msg.data / 1000.) rospy.loginfo('Found start time, window duration.') gaze_sources = (gaze_src_1, gaze_src_2, gaze_src_3) return (bag, gaze_sources, features_sink, start_time, window_duration)
def test_topic(self): from std_msgs.msg import String rospy.init_node('test_topic', anonymous=True) topic = '/test_topic' source = TopicSource(topic, String) sink = TopicSink(topic, String) pub = rospy.Publisher(topic, String) with source, sink: while pub.get_num_connections() < 1: rospy.sleep(2) test_strs = ['a', 'b', 'c'] for s in test_strs: sink.put(s, rospy.Time.now()) for msg, t in source: self.assertTrue(msg.data in test_strs) i = test_strs.index(msg.data) test_strs.pop(i) if not test_strs: return
def get_configuration(): # Get topic parameters audio_topic = rospy.get_param('audio_topic', '/pid1/chunk') start_time_topic = rospy.get_param('start_time_topic', '/bc/start_time') window_duration_topic = rospy.get_param('window_duration_topic', '/bc/window_duration') features_topic = rospy.get_param('features_topic', '/bc/audio_features') # Get source, sink parameters src_bag_path = rospy.get_param('source_bag_path', None) sink_bag_path = rospy.get_param('sink_bag_path', None) # Instantiate sources if src_bag_path: audio_source = BagSource(src_bag_path, audio_topic) start_time_src = BagSource(src_bag_path, start_time_topic) window_duration_src = BagSource(src_bag_path, window_duration_topic) else: audio_source = TopicSource(audio_topic, AudioChunk) start_time_src = TopicSource(start_time_topic, Time) window_duration_src = TopicSource(window_duration_topic, Int32) # Instantiate sinks if sink_bag_path: bag = rosbag.Bag(sink_bag_path, 'w') features_sink = BagSink(bag, features_topic, AudioFeatures) else: bag = None features_sink = TopicSink(features_topic, AudioFeatures) # Get the start time rospy.loginfo('Finding start time, window duration.') with start_time_src: msg, _ = next(start_time_src) start_time = msg.data # Get the window duration with window_duration_src: msg, _ = next(window_duration_src) window_duration = rospy.Duration(msg.data / 1000.) rospy.loginfo('Found start time, window duration.') return (bag, audio_source, features_sink, start_time, window_duration)
def main(): # Get parameters probability_topic = rospy.get_param('~probability_topic', '/bc/probabilities') backchannel_topic = rospy.get_param('~backchannel_topic', '/bc/backchannels') threshold = rospy.get_param('~threshold', 0.9) src_bag_path = rospy.get_param('~source_bag_path', None) sink_bag_path = rospy.get_param('~sink_bag_path', None) # Instantiate source if src_bag_path: probability_source = BagSource(src_bag_path, probability_topic) else: probability_source = TopicSource(probability_topic, BackchannelProbability) # Instatiate bag, if necessary if sink_bag_path: bag = rosbag.Bag(sink_bag_path, 'w') bc_sink = BagSink(bag, backchannel_topic, Backchannel) else: bag = None bc_sink = TopicSink(backchannel_topic, Backchannel) predictors = {1: {}, 2: {}, 3: {}} for actor_pid in [1, 2, 3]: for receiver_pid in [1, 2, 3]: if actor_pid == receiver_pid: continue predictors[actor_pid][receiver_pid] = Predictor( actor_pid, receiver_pid, threshold) with conditional(bag, bag): with probability_source, bc_sink: for msg, t in probability_source: predictors[msg.from_pid][msg.to_pid].put(msg.probability, t) for bc_t in predictors[msg.from_pid][msg.to_pid]: new_msg = Backchannel() new_msg.header.stamp = bc_t new_msg.from_pid = msg.from_pid new_msg.to_pid = msg.to_pid bc_sink.put(new_msg, bc_t)
def main(): # listens for messages on 2 topics, combines them all into a single, flattens them into a joint message by time rospy.init_node('bundler', anonymous=True) # Get parameters audio_features_P1_bag_path = rospy.get_param('~audio_features_P1_bag_path', None) audio_features_P2_bag_path = rospy.get_param('~audio_features_P2_bag_path', None) audio_features_P3_bag_path = rospy.get_param('~audio_features_P3_bag_path', None) audio_features_P1_topic = rospy.get_param('~audio_features_P1_topic', '/pid1/audio/features') audio_features_P2_topic = rospy.get_param('~audio_features_P2_topic', '/pid2/audio/features') audio_features_P3_topic = rospy.get_param('~audio_features_P3_topic', '/pid3/audio/features') start_time_topic = rospy.get_param('~start_time_topic', '/bc/start_time') start_time_bag_path = rospy.get_param('~start_time_bag_path', None) window_duration = rospy.get_param('~window_duration', None) window_duration_topic = rospy.get_param('~window_duration_topic', '/bc/window_duration') window_duration_bag_path = rospy.get_param('~window_duration_bag_path', None) output_topic = rospy.get_param('~output_topic', '/bc/bundle') sink_bag_path = rospy.get_param('~sink_bag_path', None) # Instantiate sources if audio_features_P1_bag_path: audio_features_P1_src = BagSource(audio_features_P1_bag_path, audio_features_P1_topic) else: audio_features_P1_src = TopicSource(audio_features_P1_topic, AudioFeatures) if audio_features_P2_bag_path: audio_features_P2_src = BagSource(audio_features_P2_bag_path, audio_features_P2_topic) else: audio_features_P2_src = TopicSource(audio_features_P2_topic, AudioFeatures) if audio_features_P3_bag_path: audio_features_P3_src = BagSource(audio_features_P3_bag_path, audio_features_P3_topic) else: audio_features_P3_src = TopicSource(audio_features_P3_topic, AudioFeatures) # Instantiate sink if sink_bag_path: sink_bag = rosbag.Bag(sink_bag_path, 'w') sink = BagSink(sink_bag, output_topic, Bundle) else: sink_bag = None sink = TopicSink(output_topic, Bundle) # Find start time, window_duration if start_time_bag_path: start_time_src = BagSource(start_time_bag_path, start_time_topic) else: start_time_src = TopicSource(start_time_topic, Time) with start_time_src: rospy.loginfo('Finding start time.') msg, _ = next(start_time_src) start_time = msg.data rospy.loginfo('Found start time.') # Set window duration if window_duration: window_duration = rospy.Duration(window_duration) else: if window_duration_bag_path: window_duration_src = BagSource(window_duration_bag_path, window_duration_topic) else: window_duration_src = TopicSource(window_duration_topic, Int32) with window_duration_src: rospy.loginfo('Finding window duration') msg, _ = next(window_duration_src) rospy.loginfo('Found window duration') window_duration = rospy.Duration(msg.data / 1000.) # Set-up combiner combiner = Combiner(start_time, window_duration, ['audio_features_P1', 'audio_features_P2', 'audio_features_P3']) with conditional(sink_bag, sink_bag): with audio_features_P1_src, audio_features_P2_src, audio_features_P3_src, sink: sync = Synchronizer([audio_features_P1_src, audio_features_P2_src, audio_features_P3_src]) for (audio_features_P1, audio_features_P2, audio_features_P3) in sync: for (msg, t) in audio_features_P1: combiner.put('audio_features_P1', msg, t, t + window_duration) for (msg, t) in audio_features_P2: combiner.put('audio_features_P2', msg, t, t + window_duration) for (msg, t) in audio_features_P3: combiner.put('audio_features_P3', msg, t, t + window_duration) for bundle, start, end in combiner: h = Header() h.stamp = start bundle['header'] = h sink.put(bundle, start)
def main(): # Get topic parameters audio_topic = rospy.get_param('~audio_topic') start_time = rospy.get_param('~start_time', None) window_duration = rospy.get_param('~window_duration', None) start_time_topic = rospy.get_param('~start_time_topic', '/bc/start_time') window_duration_topic = rospy.get_param('~window_duration_topic', '/bc/window_duration') features_topic = rospy.get_param('~features_topic', '/bc/audio_features') # Get source, sink parameters src_bag_path = rospy.get_param('~source_bag_path', None) sink_bag_path = rospy.get_param('~sink_bag_path', None) # Instantiate sources if src_bag_path: audio_src = BagSource(src_bag_path, audio_topic) start_time_src = BagSource(src_bag_path, start_time_topic) window_duration_src = BagSource(src_bag_path, window_duration_topic) else: audio_src = TopicSource(audio_topic, AudioData) start_time_src = TopicSource(start_time_topic, Time) window_duration_src = TopicSource(window_duration_topic, Int32) # Instantiate sinks if sink_bag_path: bag = rosbag.Bag(sink_bag_path, 'w') features_sink = BagSink(bag, features_topic, AudioFeatures) else: bag = None features_sink = TopicSink(features_topic, AudioFeatures) # Get the start time rospy.loginfo('Finding start time, window duration.') if not start_time: with start_time_src: msg, _ = next(start_time_src) start_time = msg.data # Get the window duration if window_duration: window_duration = rospy.Duration(window_duration) else: with window_duration_src: msg, _ = next(window_duration_src) window_duration = rospy.Duration(msg.data / 1000.) rospy.loginfo('Found start time, window duration.') with conditional(bag, bag): with audio_src, features_sink: def put_features(bundle, t): h = Header() h.stamp = t bundle['header'] = h features_sink.put(bundle, t) msg, t = next(audio_src) audio = ((msg.data, t) for (msg, t) in audio_src) compute_audio_features(audio=audio, put_features=put_features, start_time=start_time, window_duration=window_duration, get_duration=rospy.Duration, sample_rate=msg.sample_rate, sample_width=msg.sample_width, num_channels=msg.num_channels, is_bigendian=msg.is_bigendian)
def main(): # listens for messages on 2 topics, combines them all into a single, flattens them into a joint message by time rospy.init_node('bundler', anonymous=True) # Get parameters audio_topic = rospy.get_param('~audio_topic', '/bc/audio_features') audio_bag_path = rospy.get_param('~audio_bag_path', None) nod_topic = rospy.get_param('~nod_topic', '/bc/nod_features') nod_bag_path = rospy.get_param('~nod_bag_path', None) start_time_topic = rospy.get_param('~start_time_topic', '/bc/start_time') start_time_bag_path = rospy.get_param('~start_time_bag_path', None) window_duration_topic = rospy.get_param('~window_duration_topic', '/bc/window_duration') window_duration_bag_path = rospy.get_param('~window_duration_bag_path', None) output_topic = rospy.get_param('~output_topic', '/bc/bundle') sink_bag_path = rospy.get_param('~sink_bag_path', None) # Instantiate sources if audio_bag_path: audio_src = BagSource(audio_bag_path, audio_topic) else: audio_src = TopicSource(audio_topic, AudioFeatures) if nod_bag_path: # nod_src = BagSource(nod_bag_path, nod_topic) nod_src = BagSource(nod_bag_path, nod_topic) else: # nod_src = TopicSource(nod_topic, NodFeature) nod_src = TopicSource(nod_topic, NodFeatures) if start_time_bag_path: start_time_src = BagSource(start_time_bag_path, start_time_topic) else: start_time_src = TopicSource(start_time_topic, Time) if window_duration_bag_path: window_duration_src = BagSource(window_duration_bag_path, window_duration_topic) else: window_duration_src = TopicSource(window_duration_topic, Int32) # Instantiate sink if sink_bag_path: sink_bag = rosbag.Bag(sink_bag_path, 'w') sink = BagSink(sink_bag, output_topic, Bundle) else: sink_bag = None sink = TopicSink(output_topic, Bundle) # Set-up combiner rospy.loginfo('Finding start time, window duration.') with start_time_src: msg, _ = next(start_time_src) start_time = msg.data with window_duration_src: msg, _ = next(window_duration_src) window_duration = rospy.Duration(msg.data / 1000.) rospy.loginfo('Found start time, window duration.') combiner = Combiner(start_time, window_duration, ['audio', 'nod']) with conditional(sink_bag, sink_bag): with audio_src, nod_src, sink: sync = Synchronizer([audio_src, nod_src]) for (audio, nod) in sync: for (msg, t) in audio: combiner.put('audio', msg, t, t + window_duration) for (msg, t) in nod: combiner.put('nod', msg, t, t + window_duration) for bundle, start, end in combiner: h = Header() h.stamp = start bundle['header'] = h sink.put(bundle, start)