コード例 #1
0
ファイル: playLog.py プロジェクト: lixiii/CAUV_old_software
def play(fname, node, tstart, rt_rate, fixed_rate, filter_names=()):
    p = CHIL.Player(fname)
    try:
        tstart_float = float(tstart)
        p.setCursor(datetime.datetime(year=datetime.MINYEAR, month=1, day=1))
        tzero = p.timeOfNextMessage()
        p.setCursor(tzero + datetime.timedelta(seconds=tstart_float))
    except:
        p.setCursor(datetime.datetime.strptime(tstart, Strptime_Fmt))
    
    if rt_rate is not None:
        assert(fixed_rate is None)
        tstart_playback = relativeTime()
        try:
            while True:
                m, td = p.nextMessage()
                if m is None:
                    break
                if isinstance(m, str):
                    warning(m)
                    m = None
                if len(filter_names) and m.__class__.__name__ not in filter_names:
                    continue
                time_to_sleep_for = tdToFloatSeconds(td) - rt_rate * (relativeTime() - tstart_playback)
                if time_to_sleep_for/rt_rate > 10:
                    warning('more than 10 seconds until next message will be sent (%gs)' %
                            (time_to_sleep_for/rt_rate))
                while time_to_sleep_for > 0:
                    sleep_step = min((time_to_sleep_for/rt_rate, 0.2))
                    time_to_sleep_for -= sleep_step*rt_rate
                    time.sleep(sleep_step)
                sys.stdout.write('.'); sys.stdout.flush()
                if m is not None:
                    if Sonar_Timestamp_Munge and isinstance(m, msg.SonarImageMessage):
                        unix_time = time.mktime(p.cursor().timetuple()) + p.cursor().microsecond/1e6
                        # for some reason the message seems to be immutable...
                        m = msg.SonarImageMessage(
                            m.source,
                            msg.PolarImage(
                                m.image.data,
                                m.image.encoding,
                                m.image.bearing_bins,
                                m.image.rangeStart,
                                m.image.rangeEnd,
                                m.image.rangeConversion,
                                msg.TimeStamp(int(unix_time), int(1e6*(unix_time-int(unix_time))))
                            )
                        )
                    node.send(m)
        except Exception, e:
            error('error in playback: ' + str(e))
            raise
        debug('playback finished')
p_LocalNodeOutput.setParseAction(lambda x: messaging.LocalNodeOutput(*x[0]))
p_NodeInputArc << pp.Group(l \
    + p_str + c \
    + p_NodeOutput \
    + r)
p_NodeInputArc.setParseAction(lambda x: messaging.NodeInputArc(*x[0]))
p_NodeOutputArc << pp.Group(l \
    + p_NodeInput + c \
    + p_str \
    + r)
p_NodeOutputArc.setParseAction(lambda x: messaging.NodeOutputArc(*x[0]))
p_TimeStamp << pp.Group(l \
    + p_int + c \
    + p_int \
    + r)
p_TimeStamp.setParseAction(lambda x: messaging.TimeStamp(*x[0]))
p_SonarDataLine << pp.Group(l \
    + p_byteVec + c \
    + p_int + c \
    + p_int + c \
    + p_int + c \
    + p_int \
    + r)
p_SonarDataLine.setParseAction(lambda x: messaging.SonarDataLine(*x[0]))
p_PolarImage << pp.Group(l \
    + p_byteVec + c \
    + p_ImageEncodingType + c \
    + p_int32Vec + c \
    + p_float + c \
    + p_float + c \
    + p_float + c \
コード例 #3
0
ファイル: playLog.py プロジェクト: lixiii/CAUV_old_software
                time.sleep(time_to_sleep_for)
                sys.stdout.write('.'); sys.stdout.flush()
                if m is not None:
                    if Sonar_Timestamp_Munge and isinstance(m, msg.SonarImageMessage):
                        unix_time = time.mktime(p.cursor().timetuple()) + p.cursor().microsecond/1e6
                        # !!! TODO: for some reason the message seems to be immutable...
                        m = msg.SonarImageMessage(
                            m.source,
                            msg.PolarImage(
                                m.image.data,
                                m.image.encoding,
                                m.image.bearing_bins,
                                m.image.rangeStart,
                                m.image.rangeEnd,
                                m.image.rangeConversion,
                                msg.TimeStamp(int(unix_time), int(1e6*(unix_time-int(unix_time))))
                            )
                        )
                    node.send(m)
                tlast = relativeTime()
        except Exception, e:
            error('error in playback: ' + str(e))
            raise
        debug('playback finished')


if __name__ == '__main__':
    p = argparse.ArgumentParser(description='play a CHIL log file')
    p.add_argument('file', metavar='FILE', type=str)
    p.add_argument('-s', '--start', dest='start_t', default="0",
        help='start time: offset seconds or absolute %s' % Strptime_Fmt.replace('%','%%'))