Navigation

Configuration manual

You may see a fragment of the typical FLOW configuration file below. with basic explanation in comments

XML configuration for FLOW
<flow>
    <!-- 'spec' tag defines function specification: its name,
          inputs and outputs -->

    <spec name="cont_angrate">
        <inputs>
            <i alias="omega" type="core.type.v3f64"/>
            <i alias="desired_omega" type="core.type.v3f64"/>
            <i alias="collective" type="core.type.f64"/>
            <i alias="direct" type="core.type.v3f64"/>
            <i alias="enable" type="core.type.bool"/>
            <i alias="arming" type="core.type.bool"/>
            <i alias="pids_gain" type="core.type.f64"/>
        </inputs>

        <outputs>
            <o alias="m1" type="core.type.f64"/>
            <o alias="m2" type="core.type.f64"/>
            <o alias="m3" type="core.type.f64"/>
            <o alias="m4" type="core.type.f64"/>
            <o alias="armed" type="core.type.bool"/>
        </outputs>
    </spec>

    <!-- Within a 'functions' tag file specifies batch of functions: atomics
         or other nested FLOWs -->

    <functions>

        ...

        <!-- 'f' tag defines function's invication with specifying its name,
              inputs and parameters -->

        <f name="pid_angrate_z" by_spec="core.cont.pid">
            <in alias="input">inputs/desired_omega/z</in>
            <in alias="feedback">inputs/omega/z</in>
            <in alias="preset">omega_integral_preset/output</in>
            <in alias="enable">inputs/enable</in>

            <param alias="Kp">0.8</param>
            <param alias="Ki">0.1</param>
            <param alias="Kd">0.001</param>
            <param alias="integral_min">-0.3</param>
            <param alias="integral_max">0.3</param>
            <param alias="output_min">-1.0</param>
            <param alias="output_max">+1.0</param>
        </f>

        <f name="cont_idle_position" by_spec="core.source.constant">
            <param alias="value">0.0</param>
        </f>

        ...

        <f name="io" by_spec="cube.io.pwm">
            <in alias="ch4">mixer/m4</in>
            <in alias="ch3">mixer/m3</in>
            <in alias="ch2">mixer/m2</in>
            <in alias="ch1">mixer/m1</in>
            <in alias="arm">arming_logic/output</in>
            <in alias="ch8">pwm_probing_meander/output</in>

            <param alias="ch1_min">1000</param>
            <param alias="ch2_min">1000</param>
            <param alias="ch3_min">1000</param>
            <param alias="ch4_min">1000</param>
            <param alias="ch1_max">2000</param>
            <param alias="ch2_max">2000</param>
            <param alias="ch3_max">2000</param>
            <param alias="ch4_max">2000</param>
        </f>
    </functions>

    <!-- 'link_outputs' specifies a table that making a correspondence of FLOW's
          outputs (defined in spec) and functions invocations output, i.e.
          this table creates a bridge -->

    <link_outputs>
        <link alias="m1">mixer/m1</link>
        <link alias="m2">mixer/m2</link>
        <link alias="m3">mixer/m3</link>
        <link alias="m4">mixer/m4</link>
        <link alias="armed">arming_logic/output</link>
    </link_outputs>
</flow>

<spec> function specification

Tag spec defines function specification. Its convention is reused between configurable layers and is described here: Function specification

<functions> functions execution batch

Within a functions tag file specifies batch of functions: atomics (Atomic functions catalog) or other nested FLOW, FSM, IBR.

<f> function invocation

f tag defines function’s invocation with specifying its name, inputs and parameters

Let’s take a close look to function invocation.

<f name="pid_angrate_z" by_spec="core.cont.pid">
    <in alias="input">inputs/desired_omega/z</in>
    <in alias="feedback">inputs/omega/z</in>
    <in alias="preset">omega_integral_preset/output</in>
    <in alias="enable">inputs/enable</in>

    <param alias="Kp">0.8</param>
    <param alias="Ki">0.1</param>
    <param alias="Kd">0.001</param>
    <param alias="integral_min">-0.3</param>
    <param alias="integral_max">0.3</param>
    <param alias="output_min">-1.0</param>
    <param alias="output_max">+1.0</param>
</f>

How to specify invocation:

Tag

Attrs

Description

f

Function invocation

name

user define name of invocation, must be unique in FLOW scope

by_spec

name of invoked function from a list atomic functions (Atomic functions catalog) or imported FLOW, FSM

How to specify input:

Tag

Attrs

Description

in

Specification of the input’s ESWB subscription path.

alias

alias of the input from invoked function’s specification

Note

FLOW uses following convention for publishing outputs to ESWB: {FUNCTION_INVOCATION_NAME}/{OUTPUT_NAME}

Note

FLOW inputs are bridged from FLOW invocation level to local scope ESWB path: inputs/{INPUT_ALIAS}

How to specify parameter:

Tag

Attrs

Description

param

Parameter’s value specification

alias

alias of the parameter from invoked function’s specification