User Tools

Site Tools


eeros_architecture:control_system:blocks

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
eeros_architecture:control_system:blocks [2015/10/14 14:40] – [Predefined Blocks] grafeeros_architecture:control_system:blocks [2022/04/19 12:36] (current) – [Predefined Blocks] ursgraf
Line 3: Line 3:
  
 ===== Inputs and Outputs ===== ===== Inputs and Outputs =====
-Every output carries a signal. An input simply refers to connected output. +Every output carries a [[eeros_architecture:control_system:signals|signal]]. An input can be connected to an output and simply refers to the signal of this connected output. 
-{{ inoutputuml.png?500 | //Input und Output Type//}}+[{{ block.png?200 | //Two blocks connected together//}}]
 This makes sure that each input is connected to a single output. On the other hand, an output can carry its signal to many inputs. This makes sure that each input is connected to a single output. On the other hand, an output can carry its signal to many inputs.
  
 =====Predefined Blocks===== =====Predefined Blocks=====
 Build your control system by instantiating all the necessary blocks. For example: Build your control system by instantiating all the necessary blocks. For example:
-<code c>+<code cpp>
   Step<> step(0.0, -3.14159265359, 5);   Step<> step(0.0, -3.14159265359, 5);
   step.setName("step 1");   step.setName("step 1");
-  step.getOut().getSignal().setName("phi_desired"); 
  
   Sum<3> sum;   Sum<3> sum;
   sum.setName("adds feedback");   sum.setName("adds feedback");
-  sum.getOut().getSignal().setName("control signal"); 
   sum.getIn(0).connect(step.getOut());   sum.getIn(0).connect(step.getOut());
   
-  Gain<> posController(174.5); // kp=174.5 +  Gain<Vector2> posController(174.5); // kp=174.5 
-  posController.getOut().getSignal().setName("phi_d_set");+  posController.setName("gain block for position control");
 </code>  </code> 
 Each block has inputs and/or outputs. Name the output in a meaningful way and assign a physical unit to each of the outputs. The signals which  connect the different blocks will be created automatically. \\ Each block has inputs and/or outputs. Name the output in a meaningful way and assign a physical unit to each of the outputs. The signals which  connect the different blocks will be created automatically. \\
Line 27: Line 25:
  
 Output signals are created together with the blocks. On the other side, there is no need to generate and name input signals.  Output signals are created together with the blocks. On the other side, there is no need to generate and name input signals. 
 +For most blocks you have to specify the signal types on its inputs or outputs with template parameters, see [[tools:cplusplus#templates|]]
  
-=====Signals===== 
-The signals used to connect the blocks can be different types. Currently the following types are supported 
-  * Real signals  
-  * Logic signals 
-All signals are vectors of dimension 1...n. Each signal can be assigned a name and a unit. All dimensions of a signal share the same name and unit.\\ 
- 
-As an example we look at a block which does summation. Two signals, each of dimension 3, will be added together.  
-<code c> 
- Sum sum(3); 
- sum.getOut().setName("phi"); 
- sum.getOut().setUnit("rad"); 
-</code>  
-This is shown in the following diagram: 
-{{ sumblock.png?300 | //Summation block with threedimensional signals//}} 
- 
-The functions //getIn()// and //getOut()// return an input or output signal, respectively. With the summation block, //getOut()// returns the single output signal. //getIn()// returns the first input signal. This is the same as //getIn(0)//. To obtain the second input signal you have to write //getIn(1)//. 
-In order to access the individual dimensions of a certain signal, use functions like 
-<code c> 
- sum.getOut().getValue();  // returns dimension 0 of output   
- sum.getOut().getValue(0);  // returns dimension 0 of output  
- sum.getOut().getValue(2);  // returns dimension 2 of output  
- sum.getIn(1).getValue(2);  // returns dimension 2 of input 1  
-</code>  
  
 =====Making Connections===== =====Making Connections=====
 When all necessary blocks have been created the blocks must be wired together. When all necessary blocks have been created the blocks must be wired together.
-<code c+<code cpp
- sum.getIn(0).connect(step.getOut()); +  sum.getIn(0).connect(step.getOut()); 
- sum.getIn(1).connect(enc.getOut()); +  sum.getIn(1).connect(gain.getOut());  
- posController.getIn().connect(sum.getOut());+  posController.getIn().connect(sum.getOut());
 </code> </code>
 +//getIn(0)// returns the first input signal. With //getIn(1)// you will get the second input signal.
 +
 +===== Initial State of Outputs =====
 +All outputs of any block carry a value of NaN (not a number) after the block has been created. Only after the first execution of its run-method does the signal have a meaningful value.
 +
eeros_architecture/control_system/blocks.1444826454.txt.gz · Last modified: 2015/10/14 14:40 by graf