Commit 0de55e20 authored by Jeroen Vreeken's avatar Jeroen Vreeken
Browse files

puinhoop aan het einde van het corso

parent c7f632ee
corso_cmd
corso_joystick
corso_slave
*.ctrl.dot
*.ctrl.pdf
......@@ -2,8 +2,8 @@ frequency 1000
blocks {
{ "ec", "ethercat", "eth0", 6, 0 }
{ "beckhoff_el2xxx", "output_top", "EL2008", 2 }
{ "beckhoff_el2xxx", "output_low", "EL2008", 1 }
{ "beckhoff_el2xxx", "output_top", "EL2008", 1 }
{ "beckhoff_el2xxx", "output_low", "EL2008", 2 }
{ "beckhoff_el1xxx", "inputblock1", "EL1008", 4 }
{ "beckhoff_el3xxx", "analog_in", "EL3102", 5 }
......@@ -11,9 +11,6 @@ blocks {
{ "value_bool", "true" }
{ "value", "zero" }
{ "not", "oscillator0" }
{ "not", "oscillator1" }
{ "filter_lp", "distance_l_lp" }
{ "filter_lp", "distance_r_lp" }
......@@ -22,10 +19,16 @@ blocks {
{ "matrix_2x2", "input_matrix" }
{ "value_bool", "spg_enabled" }
{ "rangecheck", "diff_check" }
{ "rangecheck", "diff_deadband" }
{ "trigger", "spg_enable" }
{ "trigger", "spg_disable" }
{ "setreset", "spg_enabled" }
{ "or3", "panic_or" }
{ "not", "panic" }
{ "not", "disabled" }
{ "value_bool", "pid_distance_enabled" }
{ "value_bool", "pid_diff_enabled" }
{ "and2", "diff_enable" }
{ "setpoint_generator", "lift_spg", "lift_spg", "m" }
{ "subtract", "distance_error" }
......@@ -44,24 +47,27 @@ blocks {
links {
{ "oscillator0", "output", "output_low", "output1", true }
{ "oscillator1", "output", "output_low", "output2", true }
{ "oscillator0", "output", "oscillator0", "input", false }
{ "oscillator0", "output", "oscillator1", "input", true }
{ "false", "value", "output_low", "output3", true }
{ "false", "value", "output_low", "output4", true }
{ "false", "value", "output_low", "output1", true }
{ "false", "value", "output_low", "output2", true }
{ "false", "value", "output_low", "output5", true }
{ "false", "value", "output_low", "output6", true }
{ "false", "value", "output_low", "output7", true }
{ "false", "value", "output_low", "output8", true }
{ "spg_enabled", "value", "disabled", "input", true }
{ "spg_enable", "q", "spg_enabled", "set", true }
{ "inputblock1", "input3", "panic", "input", true }
{ "panic", "output", "panic_or", "a", true }
{ "spg_disable", "q", "panic_or", "b", true }
{ "panic_or", "q", "spg_enabled", "reset", true }
{ "panic_or", "q", "output_low", "output3", true }
{ "spg_enabled", "output", "disabled", "input", true }
{ "spg_enabled", "output", "output_low", "output4", true }
{ "analog_in", "input1", "distance_l_lp", "in", true }
{ "analog_in", "input2", "distance_r_lp", "in", true }
{ "distance_l_lp", "out", "distance_l", "in", true }
{ "distance_r_lp", "out", "distance_r", "in", true }
{ "distance_l", "out", "input_matrix", "in0", true }
......@@ -73,8 +79,14 @@ links {
{ "lift_spg", "x", "distance_error", "positive", true }
{ "input_matrix", "out0", "distance_error", "negative", true }
{ "input_matrix", "out1", "diff_check", "in", true }
{ "diff_check", "invalid", "panic_or", "c", true }
{ "input_matrix", "out1", "diff_deadband", "in", true }
{ "diff_check", "valid", "diff_enable", "a", true }
{ "spg_enabled", "output", "diff_enable", "b", true }
{ "distance_error", "difference", "distance_pid", "in", true }
{ "pid_distance_enabled", "value", "distance_pid", "enable", true }
{ "spg_enabled", "output", "distance_pid", "enable", true }
{ "lift_spg", "v", "lift_add", "in0", true }
{ "distance_pid", "out", "lift_add", "in1", true }
......@@ -83,21 +95,21 @@ links {
{ "input_matrix", "out1", "diff_pid", "in", true }
{ "diff_pid", "out", "output_matrix", "in1", true }
{ "pid_diff_enabled", "value", "diff_pid", "enable", true }
{ "diff_enable", "q", "diff_pid", "enable", true }
{ "output_matrix", "out0", "lift_ll_pwm", "in", true }
{ "output_matrix", "out0", "lift_lh_pwm", "in", true }
{ "output_matrix", "out1", "lift_rl_pwm", "in", true }
{ "output_matrix", "out1", "lift_rh_pwm", "in", true }
{ "lift_ll_pwm", "a", "output_top", "output1", true }
{ "lift_ll_pwm", "b", "output_top", "output2", true }
{ "lift_lh_pwm", "a", "output_top", "output3", true }
{ "lift_lh_pwm", "b", "output_top", "output4", true }
{ "lift_rl_pwm", "a", "output_top", "output5", true }
{ "lift_rl_pwm", "b", "output_top", "output6", true }
{ "lift_rh_pwm", "a", "output_top", "output7", true }
{ "lift_rh_pwm", "b", "output_top", "output8", true }
{ "lift_ll_pwm", "b", "output_top", "output1", true }
{ "lift_ll_pwm", "a", "output_top", "output2", true }
{ "lift_lh_pwm", "b", "output_top", "output3", true }
{ "lift_lh_pwm", "a", "output_top", "output4", true }
{ "lift_rl_pwm", "b", "output_top", "output5", true }
{ "lift_rl_pwm", "a", "output_top", "output6", true }
{ "lift_rh_pwm", "b", "output_top", "output7", true }
{ "lift_rh_pwm", "a", "output_top", "output8", true }
}
set motor_speed 0.018
......@@ -105,10 +117,6 @@ set motor_speed 0.018
params {
{ "true", "value", true }
{ "spg_enabled", "value", false }
{ "pid_distance_enabled", "value", false }
{ "pid_diff_enabled", "value", false }
{ "lift_spg", "setpoint", (float)0.0 }
{ "lift_spg", "t", (float)0.001 }
{ "lift_spg", "max_x", (float)0.8 }
......@@ -121,47 +129,51 @@ params {
{ "lift_spg", "precision_a", (float)0.005 }
{ "distance_l_lp", "t", (float)0.001 }
{ "distance_l_lp", "tau", (float)1.0 }
{ "distance_l_lp", "tau", (float)2.0 }
{ "distance_r_lp", "t", (float)0.001 }
{ "distance_r_lp", "tau", (float)1.0 }
{ "distance_r_lp", "tau", (float)2.0 }
{ "distance_l", "c0", (float)-0.543789 }
{ "distance_l", "c1", (float)1.90183 }
{ "distance_l", "c2", (float)0.679021 }
{ "distance_l", "c0", (float)-0.495196 }
{ "distance_l", "c1", (float)1.42175 }
{ "distance_l", "c2", (float)0.515971 }
{ "distance_r", "c0", (float)-0.543789 }
{ "distance_r", "c1", (float)1.90183 }
{ "distance_r", "c2", (float)0.679021 }
{ "distance_r", "c0", (float)-0.407968 }
{ "distance_r", "c1", (float)1.18524}
{ "distance_r", "c2", (float)0.374365 }
{ "input_matrix", "constants", (float) { 0.5, 0.5 },
(float) { 1.0, -1.0 } }
{ "distance_pid", "kp", (float)0.005 }
{ "diff_check", "max", (float) 0.10 }
{ "diff_check", "min", (float) -0.10 }
{ "diff_deadband", "max", (float) 0.06 }
{ "diff_deadband", "min", (float) -0.06 }
{ "distance_pid", "kp", (float)0.05 }
{ "distance_pid", "ki", (float)0.0 }
{ "distance_pid", "kd", (float)0.0 }
{ "distance_pid", "maxw", (float)0.005 }
{ "distance_pid", "minw", (float)-0.005 }
{ "diff_pid", "kp", (float)0.005 }
{ "diff_pid", "kp", (float)0.0 }
{ "diff_pid", "ki", (float)0.0 }
{ "diff_pid", "kd", (float)0.0 }
{ "diff_pid", "maxw", (float)0.005 }
{ "diff_pid", "minw", (float)-0.005 }
{ "output_matrix", "constants", (float) { 1.0/$(motor_speed), -0.5/$(motor_speed) },
(float) { 1.0/$(motor_speed), 0.5/$(motor_speed) } }
(float) { 1.0/$(motor_speed), 0.5/$(motor_speed) } }
{ "lift_ll_pwm", "divider", 10 }
{ "lift_ll_pwm", "continuous_on", true }
{ "lift_ll_pwm", "continuous_on", false }
{ "lift_lh_pwm", "divider", 10 }
{ "lift_lh_pwm", "continuous_on", true }
{ "lift_lh_pwm", "continuous_on", false }
{ "lift_rl_pwm", "divider", 10 }
{ "lift_rl_pwm", "continuous_on", true }
{ "lift_rl_pwm", "continuous_on", false }
{ "lift_rh_pwm", "divider", 10 }
{ "lift_rh_pwm", "continuous_on", true }
{ "lift_rh_pwm", "continuous_on", false }
}
traces {
{ "oscillator", "Boolean", "oscillator0", "output" }
{ "distance", "m/s", "input_matrix", "out0" }
}
digraph controller {
rankdir=LR;
node [shape=plaintext];
ranksep=1.5;
subgraph cluster_0 {
label="corso2013.ctrl";
ethercat [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR>
<TD ROWSPAN="1" BGCOLOR="yellow">ethercat<BR/>ec</TD>
</TR>
</TABLE>>];
output_top [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR>
<TD PORT="in_output1" BGCOLOR="lightblue">output1</TD>
<TD ROWSPAN="8" BGCOLOR="yellow">output_top<BR/>beckhoff_el2xxx</TD>
</TR>
<TR>
<TD PORT="in_output2" BGCOLOR="lightblue">output2</TD>
</TR>
<TR>
<TD PORT="in_output3" BGCOLOR="lightblue">output3</TD>
</TR>
<TR>
<TD PORT="in_output4" BGCOLOR="lightblue">output4</TD>
</TR>
<TR>
<TD PORT="in_output5" BGCOLOR="lightblue">output5</TD>
</TR>
<TR>
<TD PORT="in_output6" BGCOLOR="lightblue">output6</TD>
</TR>
<TR>
<TD PORT="in_output7" BGCOLOR="lightblue">output7</TD>
</TR>
<TR>
<TD PORT="in_output8" BGCOLOR="lightblue">output8</TD>
</TR>
</TABLE>>];
output_low [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR>
<TD PORT="in_output1" BGCOLOR="lightblue">output1</TD>
<TD ROWSPAN="8" BGCOLOR="yellow">output_low<BR/>beckhoff_el2xxx</TD>
</TR>
<TR>
<TD PORT="in_output2" BGCOLOR="lightblue">output2</TD>
</TR>
<TR>
<TD PORT="in_output3" BGCOLOR="lightblue">output3</TD>
</TR>
<TR>
<TD PORT="in_output4" BGCOLOR="lightblue">output4</TD>
</TR>
<TR>
<TD PORT="in_output5" BGCOLOR="lightblue">output5</TD>
</TR>
<TR>
<TD PORT="in_output6" BGCOLOR="lightblue">output6</TD>
</TR>
<TR>
<TD PORT="in_output7" BGCOLOR="lightblue">output7</TD>
</TR>
<TR>
<TD PORT="in_output8" BGCOLOR="lightblue">output8</TD>
</TR>
</TABLE>>];
inputblock1 [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR>
<TD BORDER="0"></TD>
<TD ROWSPAN="8" BGCOLOR="yellow">inputblock1<BR/>beckhoff_el1xxx</TD>
<TD PORT="out_input1" BGCOLOR="lightblue">input1</TD>
</TR>
<TR>
<TD BORDER="0"></TD>
<TD PORT="out_input2" BGCOLOR="lightblue">input2</TD>
</TR>
<TR>
<TD BORDER="0"></TD>
<TD PORT="out_input3" BGCOLOR="lightblue">input3</TD>
</TR>
<TR>
<TD BORDER="0"></TD>
<TD PORT="out_input4" BGCOLOR="lightblue">input4</TD>
</TR>
<TR>
<TD BORDER="0"></TD>
<TD PORT="out_input5" BGCOLOR="lightblue">input5</TD>
</TR>
<TR>
<TD BORDER="0"></TD>
<TD PORT="out_input6" BGCOLOR="lightblue">input6</TD>
</TR>
<TR>
<TD BORDER="0"></TD>
<TD PORT="out_input7" BGCOLOR="lightblue">input7</TD>
</TR>
<TR>
<TD BORDER="0"></TD>
<TD PORT="out_input8" BGCOLOR="lightblue">input8</TD>
</TR>
</TABLE>>];
analog_in [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR>
<TD BORDER="0"></TD>
<TD ROWSPAN="3" BGCOLOR="yellow">analog_in<BR/>beckhoff_el3xxx</TD>
<TD PORT="out_input1" BGCOLOR="lightblue">input1</TD>
</TR>
<TR>
<TD BORDER="0"></TD>
<TD PORT="out_input2" BGCOLOR="lightblue">input2</TD>
</TR>
<TR>
<TD BORDER="0"></TD>
<TD PORT="out_error" BGCOLOR="lightblue">error</TD>
</TR>
</TABLE>>];
false [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR>
<TD BORDER="0"></TD>
<TD ROWSPAN="1" BGCOLOR="yellow">false<BR/>value_bool</TD>
<TD PORT="out_value" BGCOLOR="lightblue">value</TD>
</TR>
</TABLE>>];
true [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR>
<TD BORDER="0"></TD>
<TD ROWSPAN="1" BGCOLOR="yellow">true<BR/>value_bool</TD>
<TD PORT="out_value" BGCOLOR="lightblue">value</TD>
</TR>
</TABLE>>];
zero [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR>
<TD BORDER="0"></TD>
<TD ROWSPAN="1" BGCOLOR="yellow">zero<BR/>value</TD>
<TD PORT="out_value" BGCOLOR="lightblue">value</TD>
</TR>
</TABLE>>];
oscillator0 [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR>
<TD PORT="in_input" BGCOLOR="lightblue">input</TD>
<TD ROWSPAN="1" BGCOLOR="yellow">oscillator0<BR/>not</TD>
<TD PORT="out_output" BGCOLOR="lightblue">output</TD>
</TR>
</TABLE>>];
oscillator1 [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR>
<TD PORT="in_input" BGCOLOR="lightblue">input</TD>
<TD ROWSPAN="1" BGCOLOR="yellow">oscillator1<BR/>not</TD>
<TD PORT="out_output" BGCOLOR="lightblue">output</TD>
</TR>
</TABLE>>];
distance_l_lp [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR>
<TD PORT="in_in" BGCOLOR="lightblue">in</TD>
<TD ROWSPAN="1" BGCOLOR="yellow">distance_l_lp<BR/>filter_lp</TD>
<TD PORT="out_out" BGCOLOR="lightblue">out</TD>
</TR>
</TABLE>>];
distance_r_lp [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR>
<TD PORT="in_in" BGCOLOR="lightblue">in</TD>
<TD ROWSPAN="1" BGCOLOR="yellow">distance_r_lp<BR/>filter_lp</TD>
<TD PORT="out_out" BGCOLOR="lightblue">out</TD>
</TR>
</TABLE>>];
distance_l [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR>
<TD PORT="in_in" BGCOLOR="lightblue">in</TD>
<TD ROWSPAN="1" BGCOLOR="yellow">distance_l<BR/>inverse_proportional</TD>
<TD PORT="out_out" BGCOLOR="lightblue">out</TD>
</TR>
</TABLE>>];
distance_r [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR>
<TD PORT="in_in" BGCOLOR="lightblue">in</TD>
<TD ROWSPAN="1" BGCOLOR="yellow">distance_r<BR/>inverse_proportional</TD>
<TD PORT="out_out" BGCOLOR="lightblue">out</TD>
</TR>
</TABLE>>];
input_matrix [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR>
<TD PORT="in_in0" BGCOLOR="lightblue">in0</TD>
<TD ROWSPAN="2" BGCOLOR="yellow">input_matrix<BR/>matrix_2x2</TD>
<TD PORT="out_out0" BGCOLOR="lightblue">out0</TD>
</TR>
<TR>
<TD PORT="in_in1" BGCOLOR="lightblue">in1</TD>
<TD PORT="out_out1" BGCOLOR="lightblue">out1</TD>
</TR>
</TABLE>>];
enabled [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR>
<TD BORDER="0"></TD>
<TD ROWSPAN="1" BGCOLOR="yellow">enabled<BR/>value_bool</TD>
<TD PORT="out_value" BGCOLOR="lightblue">value</TD>
</TR>
</TABLE>>];
disabled [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR>
<TD PORT="in_input" BGCOLOR="lightblue">input</TD>
<TD ROWSPAN="1" BGCOLOR="yellow">disabled<BR/>not</TD>
<TD PORT="out_output" BGCOLOR="lightblue">output</TD>
</TR>
</TABLE>>];
lift_spg [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR>
<TD PORT="in_reset_x" BGCOLOR="lightblue">reset_x</TD>
<TD ROWSPAN="5" BGCOLOR="yellow">lift_spg<BR/>setpoint_generator</TD>
<TD PORT="out_x" BGCOLOR="lightblue">x</TD>
</TR>
<TR>
<TD PORT="in_reset" BGCOLOR="lightblue">reset</TD>
<TD PORT="out_v" BGCOLOR="lightblue">v</TD>
</TR>
<TR>
<TD BORDER="0"></TD>
<TD PORT="out_a" BGCOLOR="lightblue">a</TD>
</TR>
<TR>
<TD BORDER="0"></TD>
<TD PORT="out_j" BGCOLOR="lightblue">j</TD>
</TR>
<TR>
<TD BORDER="0"></TD>
<TD PORT="out_setpoint" BGCOLOR="lightblue">setpoint</TD>
</TR>
</TABLE>>];
distance_error [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR>
<TD PORT="in_positive" BGCOLOR="lightblue">positive</TD>
<TD ROWSPAN="2" BGCOLOR="yellow">distance_error<BR/>subtract</TD>
<TD PORT="out_difference" BGCOLOR="lightblue">difference</TD>
</TR>
<TR>
<TD PORT="in_negative" BGCOLOR="lightblue">negative</TD>
</TR>
</TABLE>>];
distance_pid [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR>
<TD PORT="in_in" BGCOLOR="lightblue">in</TD>
<TD ROWSPAN="4" BGCOLOR="yellow">distance_pid<BR/>pid_aw</TD>
<TD PORT="out_out" BGCOLOR="lightblue">out</TD>
</TR>
<TR>
<TD PORT="in_enable" BGCOLOR="lightblue">enable</TD>
<TD PORT="out_outp" BGCOLOR="lightblue">outp</TD>
</TR>
<TR>
<TD BORDER="0"></TD>
<TD PORT="out_outi" BGCOLOR="lightblue">outi</TD>
</TR>
<TR>
<TD BORDER="0"></TD>
<TD PORT="out_outd" BGCOLOR="lightblue">outd</TD>
</TR>
</TABLE>>];
lift_add [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR>
<TD PORT="in_in0" BGCOLOR="lightblue">in0</TD>
<TD ROWSPAN="2" BGCOLOR="yellow">lift_add<BR/>add</TD>
<TD PORT="out_out" BGCOLOR="lightblue">out</TD>
</TR>
<TR>
<TD PORT="in_in1" BGCOLOR="lightblue">in1</TD>
</TR>
</TABLE>>];
output_matrix [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR>
<TD PORT="in_in0" BGCOLOR="lightblue">in0</TD>
<TD ROWSPAN="2" BGCOLOR="yellow">output_matrix<BR/>matrix_2x2</TD>
<TD PORT="out_out0" BGCOLOR="lightblue">out0</TD>
</TR>
<TR>
<TD PORT="in_in1" BGCOLOR="lightblue">in1</TD>
<TD PORT="out_out1" BGCOLOR="lightblue">out1</TD>
</TR>
</TABLE>>];
lift_ll_pwm [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR>
<TD PORT="in_in" BGCOLOR="lightblue">in</TD>
<TD ROWSPAN="2" BGCOLOR="yellow">lift_ll_pwm<BR/>bridge_pwm</TD>
<TD PORT="out_a" BGCOLOR="lightblue">a</TD>
</TR>
<TR>
<TD BORDER="0"></TD>
<TD PORT="out_b" BGCOLOR="lightblue">b</TD>
</TR>
</TABLE>>];
lift_lh_pwm [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR>
<TD PORT="in_in" BGCOLOR="lightblue">in</TD>
<TD ROWSPAN="2" BGCOLOR="yellow">lift_lh_pwm<BR/>bridge_pwm</TD>
<TD PORT="out_a" BGCOLOR="lightblue">a</TD>
</TR>
<TR>
<TD BORDER="0"></TD>
<TD PORT="out_b" BGCOLOR="lightblue">b</TD>
</TR>
</TABLE>>];
lift_rl_pwm [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR>
<TD PORT="in_in" BGCOLOR="lightblue">in</TD>
<TD ROWSPAN="2" BGCOLOR="yellow">lift_rl_pwm<BR/>bridge_pwm</TD>
<TD PORT="out_a" BGCOLOR="lightblue">a</TD>
</TR>
<TR>
<TD BORDER="0"></TD>
<TD PORT="out_b" BGCOLOR="lightblue">b</TD>
</TR>
</TABLE>>];
lift_rh_pwm [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR>
<TD PORT="in_in" BGCOLOR="lightblue">in</TD>
<TD ROWSPAN="2" BGCOLOR="yellow">lift_rh_pwm<BR/>bridge_pwm</TD>
<TD PORT="out_a" BGCOLOR="lightblue">a</TD>
</TR>
<TR>
<TD BORDER="0"></TD>
<TD PORT="out_b" BGCOLOR="lightblue">b</TD>
</TR>
</TABLE>>];
};
oscillator0:out_output:e -> output_low:in_output1:w [color="black", labeldistance=2.0, headlabel=<<i>(bool)</i>>, compound=true]
oscillator1:out_output:e -> output_low:in_output2:w [color="black", labeldistance=2.0, headlabel=<<i>(bool)</i>>, compound=true]
oscillator0:out_output:e -> oscillator0:in_input:w [color="blue",constraint=false, labeldistance=2.0, headlabel=<<i>(bool)</i>>, compound=true]
oscillator0:out_output:e -> oscillator1:in_input:w [color="black", labeldistance=2.0, headlabel=<<i>(bool)</i>>, compound=true]
false:out_value:e -> output_low:in_output3:w [color="black", labeldistance=2.0, headlabel=<<i>(bool)</i>>, compound=true]
false:out_value:e -> output_low:in_output4:w [color="black", labeldistance=2.0, headlabel=<<i>(bool)</i>>, compound=true]
false:out_value:e -> output_low:in_output5:w [color="black", labeldistance=2.0, headlabel=<<i>(bool)</i>>, compound=true]
false:out_value:e -> output_low:in_output6:w [color="black", labeldistance=2.0, headlabel=<<i>(bool)</i>>, compound=true]
false:out_value:e -> output_low:in_output7:w [color="black", labeldistance=2.0, headlabel=<<i>(bool)</i>>, compound=true]
false:out_value:e -> output_low:in_output8:w [color="black", labeldistance=2.0, headlabel=<<i>(bool)</i>>, compound=true]
enabled:out_value:e -> disabled:in_input:w [color="black", labeldistance=2.0, headlabel=<<i>(bool)</i>>, compound=true]
analog_in:out_input1:e -> distance_l_lp:in_in:w [color="black", labeldistance=2.0, headlabel=<<i>(float)</i>>, compound=true]
analog_in:out_input2:e -> distance_r_lp:in_in:w [color="black", labeldistance=2.0, headlabel=<<i>(float)</i>>, compound=true]
distance_l_lp:out_out:e -> distance_l:in_in:w [color="black", labeldistance=2.0, headlabel=<<i>(float)</i>>, compound=true]
distance_r_lp:out_out:e -> distance_r:in_in:w [color="black", labeldistance=2.0, headlabel=<<i>(float)</i>>, compound=true]
distance_l:out_out:e -> input_matrix:in_in0:w [color="black", labeldistance=2.0, headlabel=<<i>(float)</i>>, compound=true]
distance_r:out_out:e -> input_matrix:in_in1:w [color="black", labeldistance=2.0, headlabel=<<i>(float)</i>>, compound=true]
disabled:out_output:e -> lift_spg:in_reset:w [color="black", labeldistance=2.0, headlabel=<<i>(bool)</i>>, compound=true]
input_matrix:out_out0:e -> lift_spg:in_reset_x:w [color="black", labeldistance=2.0, headlabel=<<i>(float)</i>>, compound=true]
lift_spg:out_x:e -> distance_error:in_positive:w [color="black", labeldistance=2.0, headlabel=<<i>(float)</i>>, compound=true]
input_matrix:out_out0:e -> distance_error:in_negative:w [color="black", labeldistance=2.0, headlabel=<<i>(float)</i>>, compound=true]