Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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()
Ejemplo n.º 3
0
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!")
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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