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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
 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
Exemplo n.º 4
0
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)
Exemplo n.º 6
0
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)
Exemplo n.º 8
0
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)