SoftBank Robotics documentation What's new in NAOqi 2.5?

qi.Application API

Introduction

Application initializes the qi framework, it extract –qi-* commandline arguments and initialise various options accordingly. It also provides facilities to connect the main session. This ease the creation of console applications that connects to a session or want to be standalone.

You can pass the following arguments to your application to control the session:

  • –qi-url : address of the session to connect to
  • –qi-listen-url : address on which the session will listen
  • –qi-standalone : make a standalone session (use –qi-listen-url to set the listen url)

By default the session url is set to “tcp://127.0.0.1:9559” and the listen url to “tcp://0.0.0.0:0”.

If raw is specified there wont be a session embedded into the application and you are free to create and connect a session yourself if needed.

if autoExit is set to True, a session disconnection will quit the program. Set autoExit to False to inhibit this behavior. By default autoExit is True.

Application will parse your arguments and catch –qi-* arguments.

For a normal application you have to call start to let the Session embedded into the application connect. If you want to handle –help yourself you can do that before the application starts avoiding a useless connection to the session.

Reference

class qi.Application
__init__(args=None, autoExit=True, url=None, raw=False)
Parameters:
  • args – the list of arguments (if None sys.argv is used)
  • autoExit – By default the Application quit on session disconnection, set to False to avoid this behavior (default to True)
  • url – The default value to use for qi-url (default to tcp://127.0.0.1:9559)
  • raw – If set to True this does not include a Session into the Application. (advanced user only)

initialise the Application

start()

start the Application. Once start is called, your Application is fully working. The session is connected and available.

stop()

stop the Application. (unblock an application previously launched with run)

run()

block until stop is called. This calls start if it was not already called.

session

return the current session.

url

Url given to the session to connect to.

Deprecated

class qi.ApplicationSession

Deprecated since version 2.0.1.

Use qi.Application instead.

Examples

Simple example that lists all ALMemory keys:

import qi
import sys
from pprint import pprint

if __name__ == "__main__":
    app = qi.Application(sys.argv)

    # start the eventloop
    app.start()

    almemory = app.session.service("ALMemory")

    pprint(almemory.getDataListName())

    #no app.run() needed because we want to exit once getDataListName returns

If you put the content of this script in a listmemory.py file, then you can:

#connect to tcp://127.0.0.1:9559
$ python monscript.py

#connect to tcp://192.168.0.42:9559
$ python monscript.py --qi-url=tcp://192.168.0.42:9559

Simple example that exports a service:

import qi
import sys

class Foo:

    def bar(self):
        print("bar")

if __name__ == "__main__":
    app = qi.Application(sys.argv)

    # start the session
    app.start()

    app.session.registerService("foo", Foo())

    app.run()   # will exit when the connection is over

If you put the content of this script in a foo.py file, then you can:

#connect to tcp://127.0.0.1:9559
$ python foo.py

#connect to tcp://192.168.0.42:9559
$ python foo.py --qi-url=tcp://192.168.0.42:9559

#run a standalone session
$ python foo.py --qi-standalone

#run a standalone session on tcp://0.0.0.0:10000
$ python foo.py --qi-standalone --qi-listen-url="tcp://0.0.0.0:10000"

#let's use qicli to introspect the service
$ qicli info foo --qi-url=tcp://127.0.0.1:10000