def main(): parser = argparse.ArgumentParser(description=( 'Poppy services launcher. Use it to quickly instantiate a ' + 'poppy creature with Snap!, an http server, or a remote robot.'), epilog=""" Examples: * poppy-services --snap poppy-torso * poppy-services --snap --vrep poppy-humanoid""", formatter_class=RawTextHelpFormatter) parser.add_argument('creature', type=str, help='poppy creature name', action='store', nargs='?', choices=installed_poppy_creatures.keys()) parser.add_argument('--dummy', help='use a simulated dummy robot', action='store_true') parser.add_argument('--vrep', help='use a V-REP simulated Poppy Creature', action='store_true') parser.add_argument( '--poppy-simu', help= 'start a simulated dummy robot and the HTTP API to connect to the viewer on simu.poppy-project.org', action='store_true') parser.add_argument('--snap', help='start a Snap! robot server', action='store_true') parser.add_argument('--snap-port', help='port used by the Snap! server', default=6969, type=int) parser.add_argument('-nb', '--no-browser', help='avoid automatic start of Snap! in web browser', action='store_true') parser.add_argument('--http', help='start a http robot server', action='store_true') parser.add_argument('--http-port', help='port of HttpRobotServer, used for poppy-simu', default=8080, type=int) parser.add_argument('--remote', help='start a remote robot server', action='store_true') parser.add_argument( '--zmq', help='start a remote robot server (but with faster ZMQ)', action='store_true') parser.add_argument('--ws', help='start the websocket server', action='store_true') parser.add_argument('--ws-port', help='port of Websocket Server', default=9009, type=int) parser.add_argument('--disable-camera', help='Start the robot without the camera.', action='store_true') parser.add_argument( '-v', '--verbose', help= 'start services with verbose mode. There is 3 debug levels, add as "v" as debug level you want', action='count') parser.add_argument('-kl', '--with-keylogger', help='start a background key logger for hit detection', action='store_true') parser.add_argument('-f', '--log-file', help='Log filename', action='store') nb_creatures = len(installed_poppy_creatures.keys()) if nb_creatures == 0: print('No installed poppy creature were found!') print('You should first install the python package ' 'corresponding to your robot or check your python environment.') sys.exit(1) args = parser.parse_args() # If no creature are specified and only one is installed # We use it as default. if args.creature is None: if nb_creatures > 1: parser.print_help() sys.exit(1) args.creature = installed_poppy_creatures.keys()[0] print('No creature specified, use {}'.format(args.creature)) if args.log_file: fh = logging.FileHandler(args.log_file) fh.setLevel(logging.DEBUG) formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s') fh.setFormatter(formatter) logging.getLogger('').addHandler(fh) if args.verbose: args.snap_quiet = False args.http_quiet = False args.ws_quiet = False if args.verbose == 1: lvl = logging.WARNING elif args.verbose == 2: lvl = logging.INFO elif args.verbose > 2: lvl = logging.DEBUG if args.log_file is not None: ch = logging.FileHandler(args.log_file) else: ch = logging.StreamHandler() logging.basicConfig( level=lvl) #FIXME: this is still not working properly. # I.e. logging level isn't set properly across all files, because they are all initiated with # the wrong logger name (non-dependent, just filename). formatter = logging.Formatter( '%(name)-12s: %(levelname)-8s %(message)s') ch.setFormatter(formatter) logging.getLogger('').addHandler(ch) if not any([ args.snap, args.http, args.remote, args.zmq, args.poppy_simu, args.ws, args.dummy ]): print('No service specified! See --help for details.') sys.exit(1) if args.snap and not args.no_browser: snap_url = 'http://snap.berkeley.edu/snapsource/snap.html' block_url = 'http://{}:{}/snap-blocks.xml'.format( find_local_ip(), args.snap_port) url = '{}#open:{}'.format(snap_url, block_url) # Wait for the Snap server to be started before openning the Snap URL time.sleep(3) for browser_name in [ 'chromium-browser', 'chromium', 'google-chrome', 'chrome', 'safari', 'midori', None ]: try: browser = webbrowser.get(browser_name) browser.open(url, new=0, autoraise=True) break except Exception: pass with closing(start_poppy_with_services(args)): print('Robot created and running!') sys.stdout.flush() # Just run4ever (until Ctrl-c...) try: while (True): time.sleep(1000) except KeyboardInterrupt: print("Bye bye!") raise SystemExit
def main(): parser = argparse.ArgumentParser(description=( 'Poppy services launcher. Use it to quickly instantiate a ' + 'poppy creature with Snap!, an http server, or a remote robot.'), epilog=""" Examples: * poppy-services --snap poppy-torso * poppy-services --snap --vrep poppy-humanoid""", formatter_class=RawTextHelpFormatter) parser.add_argument('creature', type=str, help='poppy creature name', action='store', nargs='?', choices=list(installed_poppy_creatures.keys())) parser.add_argument('--dummy', help='use a simulated dummy robot', action='store_true') parser.add_argument('--vrep', help='use a V-REP simulated Poppy Creature', action='store_true') parser.add_argument( '--poppy-simu', help= 'start a simulated dummy robot and the HTTP API to connect to the viewer on simu.poppy-project.org', action='store_true') parser.add_argument('--snap', help='start a Snap! robot server', action='store_true') parser.add_argument('--snap-port', help='port used by the Snap! server', default=6969, type=int) parser.add_argument('-nb', '--no-browser', help='avoid automatic start of Snap! in web browser', action='store_true') parser.add_argument('--http', help='start a http robot server', action='store_true') parser.add_argument('--http-port', help='port of HttpRobotServer, used for poppy-simu', default=8080, type=int) parser.add_argument('--remote', help='start a remote robot server', action='store_true') parser.add_argument('--ws', help='start the websocket server', action='store_true') parser.add_argument('--ws-port', help='port of Websocket Server', default=9009, type=int) parser.add_argument('--disable-camera', help='Start the robot without the camera.', action='store_true') parser.add_argument( '-v', '--verbose', help= 'start services with verbose mode. There is 3 debug levels, add as "v" as debug level you want', action='count') parser.add_argument('-f', '--log-file', help='Log filename', action='store') nb_creatures = len(installed_poppy_creatures.keys()) if nb_creatures == 0: print('No installed poppy creature were found!') print('You should first install the python package ' 'corresponding to your robot or check your python environment.') sys.exit(1) args = parser.parse_args() # If no creature are specified and only one is installed # We use it as default. if args.creature is None: if nb_creatures > 1: parser.print_help() sys.exit(1) args.creature = list(installed_poppy_creatures.keys())[0] print('No creature specified, use {}'.format(args.creature)) if args.log_file: fh = logging.FileHandler(args.log_file) fh.setLevel(logging.DEBUG) formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s') fh.setFormatter(formatter) logging.getLogger('').addHandler(fh) if args.verbose: args.snap_quiet = False args.http_quiet = False args.ws_quiet = False if args.verbose == 1: lvl = logging.WARNING elif args.verbose == 2: lvl = logging.INFO elif args.verbose > 2: lvl = logging.DEBUG if args.log_file is not None: ch = logging.FileHandler(args.log_file) else: ch = logging.StreamHandler() ch.setLevel(lvl) formatter = logging.Formatter( '%(name)-12s: %(levelname)-8s %(message)s') ch.setFormatter(formatter) logging.getLogger('').addHandler(ch) if not any([ args.snap, args.http, args.remote, args.poppy_simu, args.ws, args.dummy ]): print('No service specified! See --help for details.') sys.exit(1) static_server_started = False if args.snap and not args.no_browser: snap_static_port = 8888 snap_static_server = HTTPServer(("0.0.0.0", snap_static_port), SimpleHTTPRequestHandler) from pypot.vpl.snap import download_snap_interactively static_app = download_snap_interactively() if static_app is None: print( "The static server was not started because the VPL app has not been downloaded" ) else: os.chdir(static_app) snap_static_server_process = Process( target=snap_static_server.serve_forever, args=()) static_server_started = True snap_static_server_process.start() snap_url = 'http://127.0.0.1:{}/snap.html'.format(snap_static_port) block_url = 'http://{}:{}/snap-blocks.xml'.format( find_local_ip(), args.snap_port) url = '{}#open:{}'.format(snap_url, block_url) with closing(start_poppy_with_services(args)): msg = '' if args.dummy or args.poppy_simu: msg += 'Simulated robot created! He is running on: ip={}'.format( find_local_ip()) else: msg += 'Robot instantiated! He is running on: ip={},'.format( find_local_ip()) if args.disable_camera: msg += ' without camera access.' else: msg += ' with camera access.' if args.vrep: msg += ' With V-REP link.' if args.snap or args.ws or args.http or args.poppy_simu: msg += '\nServer started on:' if args.http or args.poppy_simu: msg += ' http_port={},'.format(args.http_port) if args.snap: msg += ' Snap_port={},'.format(args.snap_port) if args.ws: msg += ' ws_port={},'.format(args.ws_port) msg = msg[0:-1] + '.' print(msg) sys.stdout.flush() if static_server_started: for browser_name in [ 'chromium-browser', 'chromium', 'google-chrome', 'chrome', 'safari', 'midori', None ]: try: browser = webbrowser.get(browser_name) browser.open(url, new=0, autoraise=True) break except Exception: pass # Just run4ever (until Ctrl-c...) try: while (True): time.sleep(1000) except KeyboardInterrupt: print("Bye bye!") if static_server_started: snap_static_server_process.terminate() snap_static_server_process.join()
def main(): parser = argparse.ArgumentParser( description=('Poppy services launcher. Use it to quickly instantiate a ' + 'poppy creature with Snap!, an http server, or a remote robot.'), epilog=""" Examples: * poppy-services --snap poppy-torso * poppy-services --snap --vrep poppy-humanoid""", formatter_class=RawTextHelpFormatter) parser.add_argument('creature', type=str, help='poppy creature name', action='store', nargs='?', choices=installed_poppy_creatures.keys()) parser.add_argument('--vrep', help='use a V-REP simulated Poppy Creature', action='store_true') parser.add_argument('--poppy-simu', help='use a Three.js visualization', action='store_true') parser.add_argument('--snap', help='start a Snap! robot server', action='store_true') parser.add_argument('--snap-port', help='port used by the Snap! server', default=6969, type=int) parser.add_argument('-nb', '--no-browser', help='avoid automatic start of Snap! in web browser', action='store_true') parser.add_argument('--http', help='start a http robot server', action='store_true') parser.add_argument('--http-port', help='port of HttpRobotServer, used for poppy-simu', default=8080, type=int) parser.add_argument('--remote', help='start a remote robot server', action='store_true') parser.add_argument('--ws', help='start the websocket server', action='store_true') parser.add_argument('--ws-port', help='port of Websocket Server', default=9009, type=int) parser.add_argument('--disable-camera', help='Start the robot without the camera.', action='store_true') parser.add_argument('-v', '--verbose', help='start services with verbose mode. There is 3 debug levels, add as "v" as debug level you want', action='count') parser.add_argument('-f', '--log-file', help='Log filename', action='store') nb_creatures = len(installed_poppy_creatures.keys()) if nb_creatures == 0: print('No installed poppy creature were found!') print('You should first install the python package ' 'corresponding to your robot or check your python environment.') sys.exit(1) args = parser.parse_args() # If no creature are specified and only one is installed # We use it as default. if args.creature is None: if nb_creatures > 1: parser.print_help() sys.exit(1) args.creature = installed_poppy_creatures.keys()[0] print('No creature specified, use {}'.format(args.creature)) if args.log_file: fh = logging.FileHandler(args.log_file) fh.setLevel(logging.DEBUG) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') fh.setFormatter(formatter) logging.getLogger('').addHandler(fh) if args.verbose: args.snap_quiet = False args.http_quiet = False args.ws_quiet = False if args.verbose == 1: lvl = logging.WARNING elif args.verbose == 2: lvl = logging.INFO elif args.verbose > 2: lvl = logging.DEBUG if args.log_file is not None: ch = logging.FileHandler(args.log_file) else: ch = logging.StreamHandler() ch.setLevel(lvl) formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s') ch.setFormatter(formatter) logging.getLogger('').addHandler(ch) if not any([args.snap, args.http, args.remote, args.poppy_simu, args.ws]): print('No service specified! See --help for details.') sys.exit(1) if args.snap and not args.no_browser: snap_url = 'http://snap.berkeley.edu/snapsource/snap.html' block_url = 'http://{}:{}/snap-blocks.xml'.format(find_local_ip(), args.snap_port) url = '{}#open:{}'.format(snap_url, block_url) for browser_name in ['chromium-browser', 'chromium', 'google-chrome', 'chrome', 'safari', 'midori', None]: try: browser = webbrowser.get(browser_name) browser.open(url, new=0, autoraise=True) break except: pass with closing(start_poppy_with_services(args)): print('Robot created and running!') sys.stdout.flush() # Just run4ever (until Ctrl-c...) try: while(True): time.sleep(1000) except KeyboardInterrupt: print("Bye bye!")
if sys.version_info < (3, 3): from urlparse import urlparse else: from urllib.parse import urlparse parser = argparse.ArgumentParser(description='Serve the webinterface ' 'for controlling Poppy robots') parser.add_argument('--debug', action='store_true', help='use the debug mode') parser.add_argument('--test', action='store_true', help='does not modify anything on your machine ' '(except from a config file in /tmp)') parser.add_argument( '--creature', choices=installed_poppy_creatures.keys(), help= 'Which creature to use (by default will use the one set in the yaml config).' ) args = parser.parse_args() if args.test: from dummy_pm import PuppetMaster else: from puppet_master import PuppetMaster app = Flask(__name__) app.secret_key = os.urandom(24) if args.debug: app.debug = True
from poppyd import PoppyDaemon if sys.version_info < (3, 3): from urlparse import urlparse else: from urllib.parse import urlparse parser = argparse.ArgumentParser(description='Serve the webinterface ' 'for controlling Poppy robots') parser.add_argument('--debug', action='store_true', help='use the debug mode') parser.add_argument('--test', action='store_true', help='does not modify anything on your machine ' '(except from a config file in /tmp)') parser.add_argument('--creature', choices=installed_poppy_creatures.keys(), help='Which creature to use (by default will use the one set in the yaml config).') args = parser.parse_args() if args.test: from dummy_pm import PuppetMaster else: from puppet_master import PuppetMaster app = Flask(__name__) app.secret_key = os.urandom(24) if args.debug: app.debug = True