コード例 #1
0
ファイル: test_config.py プロジェクト: m3d/osgar_archive_2020
 def test_application(self):
     conf_dir = '../../config'
     filename = test_data('ro2018-spider-gps-imu.json', conf_dir)
     conf = config_load(filename, application=MyTestRobot)
     self.assertTrue(conf['robot']['modules']['app']['driver'].endswith(
         'lib.test_config:MyTestRobot'))
     conf = config_load(filename,
                        application='osgar.lib.test_config:MyTestRobot')
     self.assertTrue(conf['robot']['modules']['app']['driver'].endswith(
         'lib.test_config:MyTestRobot'))
コード例 #2
0
ファイル: test_config.py プロジェクト: m3d/osgar_archive_2020
 def test_multiple_config_files(self):
     conf_dir = '../../config'
     filename1 = test_data('ro2018-spider-gps-imu.json', conf_dir)
     filename2 = test_data('ro2018-czu-waypoints.json', conf_dir)
     conf = config_load(filename1, filename2)
     self.assertIn('maxspeed', conf['robot']['modules']['app']['init'])
     self.assertIn('out', conf['robot']['modules']['app'])
コード例 #3
0
def launch(app, description, prefix):
    parser = argparse.ArgumentParser(description=description)
    subparsers = parser.add_subparsers(help='sub-command help', dest='command')
    subparsers.required = True
    parser_run = subparsers.add_parser('run', help='run on real HW')
    parser_run.add_argument('config', nargs='+', help='configuration file')
    parser_run.add_argument('--note', help='add description')

    parser_replay = subparsers.add_parser('replay', help='replay from logfile')
    parser_replay.add_argument('logfile', help='recorded log file')
    parser_replay.add_argument(
        '--force',
        '-F',
        dest='force',
        action='store_true',
        help='force replay even for failing output asserts')
    parser_replay.add_argument('--config',
                               nargs='+',
                               help='force alternative configuration file')
    parser_replay.add_argument('--verbose',
                               '-v',
                               help="verbose mode",
                               action='store_true')
    args = parser.parse_args()

    if args.command == 'replay':
        args.module = 'app'
        game = replay(args, application=app)
        game.verbose = args.verbose
        game.run()

    elif args.command == 'run':
        cfg = config_load(*args.config, application=app)
        record(cfg, log_prefix=prefix)
コード例 #4
0
def main(record=record):
    import logging
    logging.basicConfig(
        level=logging.DEBUG,
        format='%(asctime)s %(name)-16s %(levelname)-8s %(message)s',
    )
    parser = argparse.ArgumentParser(
        description='Record run on real HW with given configuration')
    parser.add_argument('config', nargs='+', help='configuration file')
    parser.add_argument('--note', help='add description')
    parser.add_argument('--duration',
                        help='recording duration (sec), default infinite',
                        type=float)
    parser.add_argument('--log', help='force record log filename')
    parser.add_argument('--application',
                        help='import string to application',
                        default=None)
    args = parser.parse_args()

    prefix = os.path.basename(args.config[0]).split('.')[0] + '-'
    cfg = config_load(*args.config, application=args.application)
    record(cfg,
           log_prefix=prefix,
           duration_sec=args.duration,
           log_filename=args.log)
コード例 #5
0
ファイル: replay.py プロジェクト: robotika/osgar
def replay(args, application=None):
    log = LogReader(args.logfile, only_stream_id=0)
    print("original args:", next(log)[-1])  # old arguments
    config_str = next(log)[-1]
    config = literal_eval(config_str.decode('ascii'))
    if args.config is not None:
        config = config_load(*args.config, application=application)

    names = logger.lookup_stream_names(args.logfile)
    if args.debug:
        print("streams:")
        for i, name in enumerate(names):
            print(f" {i+1:2d} {name}")

    module = args.module
    assert module in config['robot']['modules'], (
        module, list(config['robot']['modules'].keys()))
    module_config = config['robot']['modules'][module]

    inputs = {}
    for edge_from, edge_to in config['robot']['links']:
        if edge_to.split('.')[0] == module:
            if edge_from not in names:
                g_logger.warning('Missing name: %s' % edge_from)
                names.append(edge_from)
            inputs[1 + names.index(edge_from)] = edge_to.split('.')[1]

    outputs = {
        i + 1: out.split('.')[1]
        for i, out in enumerate(names) if out.startswith(f"{module}.")
    }
    if args.debug:
        print("inputs:")
        for i, name in sorted(inputs.items()):
            print(f" {i:2d} {name}")
        print("outputs:")
        for i, name in sorted(outputs.items()):
            print(f" {i:2d} {name}")

    if args.force:
        reader = LogReader(args.logfile, only_stream_id=inputs.keys())
        bus = LogBusHandlerInputsOnly(reader, inputs=inputs)
    else:
        streams = list(inputs.keys()) + list(outputs.keys())
        reader = LogReader(args.logfile, only_stream_id=streams)
        bus = LogBusHandler(reader, inputs, outputs)

    driver_name = module_config['driver']
    module_class = get_class_by_name(driver_name)
    module_instance = module_class(module_config.get('init', {}), bus=bus)

    bus.node = module_instance  # needed for slots
    return module_instance
コード例 #6
0
def replay(args, application=None):
    log = LogReader(args.logfile, only_stream_id=0)
    print("original args:", next(log)[-1])  # old arguments
    config_str = next(log)[-1]
    config = literal_eval(config_str.decode('ascii'))
    if args.config is not None:
        config = config_load(*args.config)

    names = logger.lookup_stream_names(args.logfile)
    print("stream names:")
    for name in names:
        print(" ", name)

    module = args.module
    assert module in config['robot']['modules'], (
        module, list(config['robot']['modules'].keys()))
    module_config = config['robot']['modules'][module]

    input_names = module_config['in']
    output_names = module_config['out']
    print("inputs:", input_names)
    print("outputs:", output_names)

    inputs = {}
    for edge_from, edge_to in config['robot']['links']:
        if edge_to.split('.')[0] == module:
            if edge_from not in names:
                logging.warning(f'Missing name: {edge_from}')
                names.append(edge_from)
            inputs[1 + names.index(edge_from)] = edge_to.split('.')[1]

    # start reading log from the beginning again
    if args.force:
        log = LogReader(args.logfile, only_stream_id=inputs.keys())
        bus = LogBusHandlerInputsOnly(log, inputs=inputs)
    else:
        outputs = dict([(1 + names.index('.'.join([module, name])), name)
                        for name in output_names])
        streams = list(inputs.keys()) + list(outputs.keys())
        log = LogReader(args.logfile, only_stream_id=streams)
        bus = LogBusHandler(log, inputs=inputs, outputs=outputs)

    driver_name = module_config['driver']
    if driver_name == 'application':
        assert application is not None
        module_class = application
    else:
        module_class = get_class_by_name(driver_name)
    module_instance = module_class(module_config['init'], bus=bus)
    bus.node = module_instance
    return module_instance
コード例 #7
0
def main():
    import argparse
    import os
    from osgar.lib.config import config_load
    from osgar.record import record

    parser = argparse.ArgumentParser(description='SubT Teambase')
    parser.add_argument('config', nargs='+', help='configuration file')
    parser.add_argument('--note', help='add description')
    parser.add_argument('--log', nargs='?', help='record log filename')
    parser.add_argument('--robot-name',
                        required=True,
                        help='T<simulated seconds>F* name')
    args = parser.parse_args()

    cfg = config_load(*args.config)
    cfg['robot']['modules']['app']['init']['robot_name'] = args.robot_name
    prefix = os.path.basename(args.config[0]).split('.')[0] + '-'
    record(cfg, prefix, args.log)
コード例 #8
0
def main():
    import argparse
    from osgar.lib.config import load as config_load
    from osgar.record import Recorder
    from osgar.logger import LogWriter, LogReader

    parser = argparse.ArgumentParser(description='SubT Challenge')
    subparsers = parser.add_subparsers(help='sub-command help', dest='command')
    subparsers.required = True
    parser_run = subparsers.add_parser('run', help='run on real HW')
    parser_run.add_argument('config', nargs='+', help='configuration file')
    parser_run.add_argument('--note', help='add description')

    parser_replay = subparsers.add_parser('replay', help='replay from logfile')
    parser_replay.add_argument('logfile', help='recorded log file')
    parser_replay.add_argument('--force', '-F', dest='force', action='store_true', help='force replay even for failing output asserts')
    parser_replay.add_argument('--config', nargs='+', help='force alternative configuration file')
    args = parser.parse_args()

    if args.command == 'replay':
        from osgar.replay import replay
        args.module = 'app'
        game = replay(args, application=SubTChallenge)
        game.play()

    elif args.command == 'run':
        # To reduce latency spikes as described in https://morepypy.blogspot.com/2019/01/pypy-for-low-latency-systems.html.
        # Increased latency leads to uncontrolled behavior and robot either missing turns or hitting walls.
        # Disabled garbage collection needs to be paired with gc.collect() at place(s) that are not time sensitive.
        gc.disable()

        # support simultaneously multiple platforms
        prefix = os.path.basename(args.config[0]).split('.')[0] + '-'
        log = LogWriter(prefix=prefix, note=str(sys.argv))
        config = config_load(*args.config)
        log.write(0, bytes(str(config), 'ascii'))  # write configuration
        robot = Recorder(config=config['robot'], logger=log, application=SubTChallenge)
        game = robot.modules['app']  # TODO nicer reference
        robot.start()
        game.play()
        robot.finish()
コード例 #9
0
    parser_run = subparsers.add_parser('run', help='run on real HW')
    parser_run.add_argument('config', nargs='+', help='configuration file')
    parser_run.add_argument('--note', help='add description')

    parser_replay = subparsers.add_parser('replay', help='replay from logfile')
    parser_replay.add_argument('logfile', help='recorded log file')
    parser_replay.add_argument(
        '--force',
        '-F',
        dest='force',
        action='store_true',
        help='force replay even for failing output asserts')
    parser_replay.add_argument('--config',
                               nargs='+',
                               help='force alternative configuration file')
    args = parser.parse_args()

    if args.command == 'replay':
        from osgar.replay import replay
        args.module = 'app'
        app = replay(args, application=RoboOrienteering2018)
        app.play()

    elif args.command == 'run':
        cfg = config_load(*args.config, application=RoboOrienteering2018)
        record(cfg, 'ro2018-')
    else:
        assert False, args.command  # unsupported command

# vim: expandtab sw=4 ts=4
コード例 #10
0
ファイル: subt.py プロジェクト: pTommyed/osgar
                               nargs='+',
                               help='force alternative configuration file')
    args = parser.parse_args()

    if args.command == 'replay':
        from osgar.replay import replay
        args.module = 'app'
        game = replay(args, application=SubTChallenge)
        game.play()

    elif args.command == 'run':
        # To reduce latency spikes as described in https://morepypy.blogspot.com/2019/01/pypy-for-low-latency-systems.html.
        # Increased latency leads to uncontrolled behavior and robot either missing turns or hitting walls.
        # Disabled garbage collection needs to be paired with gc.collect() at place(s) that are not time sensitive.
        gc.disable()

        # support simultaneously multiple platforms
        prefix = os.path.basename(args.config[0]).split('.')[0] + '-'
        log = LogWriter(prefix=prefix, note=str(sys.argv))
        config = config_load(*args.config)
        log.write(0, bytes(str(config), 'ascii'))  # write configuration
        robot = Recorder(config=config['robot'],
                         logger=log,
                         application=SubTChallenge)
        game = robot.modules['app']  # TODO nicer reference
        robot.start()
        game.play()
        robot.finish()

# vim: expandtab sw=4 ts=4
コード例 #11
0
    parser_run.add_argument('--timeout', help='seconds before stopping (default: %(default)s)', type=int, default=10)

    parser_replay = subparsers.add_parser('replay', help='replay from logfile')
    parser_replay.add_argument('logfile', help='recorded log file')
    parser_replay.add_argument('--force', '-F', dest='force', action='store_true', help='force replay even for failing output asserts')
    parser_replay.add_argument('--config', nargs='+', help='force alternative configuration file')
    parser_replay.add_argument('--verbose', '-v', help="verbose mode", action='store_true')

    args = parser.parse_args()
    print(args)

    if args.command == 'replay':
        args.module = 'app'
        game = replay(args, application=Go)
        game.verbose = args.verbose
        game.run()

    elif args.command == 'run':
        prefix = 'go-' + os.path.basename(args.config[0]).split('.')[0] + '-'
        cfg = config_load(*args.config, application=Go)

        # apply overrides from command line
        cfg['robot']['modules']['app']['init']['dist'] = args.dist
        cfg['robot']['modules']['app']['init']['timeout'] = args.timeout
        if args.speed is not None:
            cfg['robot']['modules']['app']['init']['max_speed'] = args.speed

        record(cfg, prefix)

# vim: expandtab sw=4 ts=4
コード例 #12
0
ファイル: test_config.py プロジェクト: m3d/osgar_archive_2020
 def test_load_config_files(self):
     conf_dir = '../../config'
     filename = test_data('ro2018-spider-gps-imu.json', conf_dir)
     conf = config_load(filename)
     self.assertEqual(conf['version'], 2)
コード例 #13
0
ファイル: sick2018.py プロジェクト: robotika/osgar
    parser_replay = subparsers.add_parser('replay', help='replay from logfile')
    parser_replay.add_argument('logfile', help='recorded log file')
    parser_replay.add_argument(
        '--force',
        '-F',
        dest='force',
        action='store_true',
        help='force replay even for failing output asserts')
    parser_replay.add_argument('--config',
                               nargs='+',
                               help='force alternative configuration file')
    parser_replay.add_argument('--verbose',
                               '-v',
                               help="verbose mode",
                               action='store_true')
    args = parser.parse_args()

    if args.command == 'replay':
        from osgar.replay import replay
        args.module = 'app'
        game = replay(args, application=SICKRobot2018)
        game.verbose = args.verbose
        game.play()

    elif args.command == 'run':
        cfg = config_load(*args.config, application=SICKRobot2018)
        record(cfg, 'eduro-')

# vim: expandtab sw=4 ts=4
コード例 #14
0
ファイル: sick2018.py プロジェクト: robotika/osgar
    subparsers.required = True
    parser_run = subparsers.add_parser('run', help='run on real HW')
    parser_run.add_argument('config', nargs='+', help='configuration file')
    parser_run.add_argument('--note', help='add description')

    parser_replay = subparsers.add_parser('replay', help='replay from logfile')
    parser_replay.add_argument('logfile', help='recorded log file')
    parser_replay.add_argument('--force', '-F', dest='force', action='store_true', help='force replay even for failing output asserts')
    parser_replay.add_argument('--config', nargs='+', help='force alternative configuration file')
    parser_replay.add_argument('--verbose', '-v', help="verbose mode", action='store_true')
    args = parser.parse_args()

    if args.command == 'replay':
        from replay import replay
        args.module = 'app'
        game = replay(args, application=SICKRobot2018)
        game.verbose = args.verbose
        game.play()

    elif args.command == 'run':
        log = LogWriter(prefix='eduro-', note=str(sys.argv))
        config = config_load(*args.config)
        log.write(0, bytes(str(config), 'ascii'))  # write configuration
        robot = Recorder(config=config['robot'], logger=log, application=SICKRobot2018)
        game = robot.modules['app']  # TODO nicer reference
        robot.start()
        game.play()
        robot.finish()

# vim: expandtab sw=4 ts=4
コード例 #15
0
ファイル: main.py プロジェクト: m3d/osgar_archive_2020
def main():
    import argparse
    from osgar.lib.config import config_load
    from osgar.record import record

    parser = argparse.ArgumentParser(description='SubT Challenge')
    subparsers = parser.add_subparsers(help='sub-command help', dest='command')
    subparsers.required = True
    parser_run = subparsers.add_parser('run', help='run on real HW')
    parser_run.add_argument('config', nargs='+', help='configuration file')
    parser_run.add_argument('--note', help='add description')
    parser_run.add_argument('--walldist', help='distance for wall following (default: %(default)sm)', default=1.0, type=float)
    parser_run.add_argument('--side', help='which side to follow', choices=['left', 'right', 'auto'], required=True)
    parser_run.add_argument('--speed', help='maximum speed (default: from config)', type=float)
    parser_run.add_argument('--timeout', help='seconds of exploring before going home (default: %(default)s)',
                            type=int, default=10*60)
    parser_run.add_argument('--log', nargs='?', help='record log filename')
    parser_run.add_argument('--init-offset', help='inital 3D offset accepted as a string of comma separated values (meters)')
    parser_run.add_argument('--init-path', help='inital path to be followed from (0, 0). 2D coordinates are separated by ;')
    parser_run.add_argument('--start-paused', dest='start_paused', action='store_true',
                            help='start robota Paused and wait for LoRa Contine command')

    parser_replay = subparsers.add_parser('replay', help='replay from logfile')
    parser_replay.add_argument('logfile', help='recorded log file')
    parser_replay.add_argument('--force', '-F', dest='force', action='store_true', help='force replay even for failing output asserts')
    parser_replay.add_argument('--config', nargs='+', help='force alternative configuration file')
    args = parser.parse_args()

    if args.command == 'replay':
        from osgar.replay import replay
        args.module = 'app'
        app = replay(args, application=SubTChallenge)
        app.play()

    elif args.command == 'run':
        # To reduce latency spikes as described in https://morepypy.blogspot.com/2019/01/pypy-for-low-latency-systems.html.
        # Increased latency leads to uncontrolled behavior and robot either missing turns or hitting walls.
        # Disabled garbage collection needs to be paired with gc.collect() at place(s) that are not time sensitive.
        gc.disable()

        cfg = config_load(*args.config, application=SubTChallenge)

        # apply overrides from command line
        cfg['robot']['modules']['app']['init']['walldist'] = args.walldist
        if args.side == 'auto':
            cfg['robot']['modules']['app']['init']['right_wall'] = 'auto'
        else:
            cfg['robot']['modules']['app']['init']['right_wall'] = args.side == 'right'
        cfg['robot']['modules']['app']['init']['timeout'] = args.timeout
        if args.init_offset is not None:
            x, y, z = [float(x) for x in args.init_offset.split(',')]
            cfg['robot']['modules']['app']['init']['init_offset'] = [int(x*1000), int(y*1000), int(z*1000)]
        if args.init_path is not None:
            cfg['robot']['modules']['app']['init']['init_path'] = args.init_path

        if args.speed is not None:
            cfg['robot']['modules']['app']['init']['max_speed'] = args.speed

        cfg['robot']['modules']['app']['init']['start_paused'] = args.start_paused

        prefix = os.path.basename(args.config[0]).split('.')[0] + '-'
        record(cfg, prefix, args.log)