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()
def record(config_filename, log_prefix, duration_sec=None, application=None): log = LogWriter(prefix=log_prefix, note=str(sys.argv)) if type(config_filename) == str: config = load(config_filename) else: config = load(*config_filename) log.write(0, bytes(str(config), 'ascii')) # write configuration recorder = Recorder(config=config['robot'], logger=log, application=application) recorder.start() if application is not None: game = recorder.modules['app'] # TODO nicer reference game.join() # wait for application termination else: if duration_sec is None: while True: time.sleep(1.0) else: time.sleep(duration_sec) recorder.finish()
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
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