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': record(args.config, log_prefix=prefix, application=app)
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 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': record(args.config, log_prefix=prefix, application=app)
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
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,
parser_run.add_argument('--speed', '-s', help="speed in m/s (default: from config)", type=float) parser_run.add_argument('--dist', '-d', help="distance in m (default: %(default)sm)", type=float, default=1.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)
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
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=Turn) game.verbose = args.verbose game.run() elif args.command == 'run': prefix = 'turn-' + os.path.basename(args.config[0]).split('.')[0] + '-' cfg = config_load(*args.config, application=Turn) # apply overrides from command line cfg['robot']['modules']['app']['init']['angle_deg'] = args.angle cfg['robot']['modules']['app']['init']['timeout'] = args.timeout if args.speed is not None: cfg['robot']['modules']['app']['init']['max_speed'] = args.speed if args.angular_speed is not None: cfg['robot']['modules']['app']['init'][
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
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)