- C-ATOM >
- Function flow - FLOW >
- Configuration manual
Configuration manual¶
You may see a fragment of the typical FLOW configuration file below. with basic explanation in comments
<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 |
<link_outputs> forwarding results to FLOW outputs¶
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
Tag |
Attrs |
Description |
---|---|---|
link_outputs |
Grouping for FLOW output correspondence links |
|
link |
Specifies a path for bridging output from |
|
alias |
alias of the output from FLOW specification |