# Specification¶

## Definition¶

A not so rigorous description of a rocon uri string::

rocon://concert_name/hardware_platform/name/application_framework/operating_system#rocon_app


It can be expressed more rigorously via an ebnf notation, however this gets complicated given the various contexts in which rocon uri strings get used. A description of the various fields:

• concert_name : the concert name for which a resource is attached to.
• hardware_platform : the hardware associated with this resource (e.g. pc, turtlebot)
• name : name of this resource, typically a unique robot name within a concert (e.g. Bob3)
• application_framework : the software framework used, generally this is ros, but can be others (e.g. ros, opros).
• operating_system : operating system/version that is used (e.g. precise)
• rocon_app : the ros resource name of a rocon app (e.g. rocon_apps/teleop)

## Special Operations¶

Typically a full rocon uri string is not required and it can also be manipulated via specially assigned operators and wildcards. These include:

• Empty Concert Name

This field is typically always empty and represents the current concert (multimaster solution). It has been reserved for future use if we ever wish to enable multi-concert solutions.

• Empty Field/Wildcard ‘*’

This represents the ‘any’ definition in which any valid value for that field is compatible. An example for this usage is to define the compatibility string for a rocon app which is able to run on any hardware_platform. This might be the case for something like a generic ros talker app which does not have specific hardware requirements.

Fields may be discarded from right to left depending on context. This allows brevity in specifying some rocon uri strings for which the full context is not important. Discarded fields are assumed to take on the same value as for empty or wildcarded fields.

• Or Operator ‘|’

The harware_platform, application_framework and operating_system fields all support the use of the or operator in which several values can be specified together. This can be used for instance, to define several platforms that a rocon app is permitted to run on. The Or operator is not valid for the name field.

• Regex Patterns

Regex patterns can be used on the name field. The name field for rocon resources (i.e. robots) is often uniquely specified by postfixing a uuid/counter on the end. Requests for these resources can customise requests for a particular name by using a regex patterns.

## Examples¶

A retaskable client, i.e., a robot that is available for use within a rocon concert::

rocon://turtlebot2/cybernetic_pirate
rocon:/pr2/bob


An allocated resource, i.e., a robot that has been allocated and is performing a scheduled job within a rocon concert::

rocon:/turtlebot2/cybernetic_pirate#rocon_apps/im_here_to_make_you_lazy
rocon:/pr2/bob#rocon_apps/look_menacing


For resource requests made by concert services requesting a robot to perform a task within a rocon concert::

rocon:/*/*#rocon_apps/im_here_to_make_you_lazy
rocon:/pr2/*#rocon_apps/look_menacing


A remocon identifier, i.e. a software remote control connecting to a rocon concert via a human::

rocon:/note3/remocon_342ac3e813/hydro/jellybean
rocon:/pc/bobs_remocon/hydro/precise


For compatibility string specifications of robot apps that define the permitted platforms on which it can run::

rocon:/turtlebot2
rocon:/turtlebot2|pr2
rocon:/


For compatibility string specifications of human interactions (apps running on a remocon) that define the permitted platforms on which it can run::

rocon:/note3/*/hydro/jellybean
rocon:/pc/bobs_remocon/hydro/precise