## 4 Controller Design
### Feed-Forward Controller Design  
The feed-forward controller developed in this paper was designed using experimental data. Various pressure combinations were supplied to each bellows and the resulting posture was measured. The supplied pressures ranged from 0 bar to 5 bar with a 0.2 bar increment. This results in 18275 different pressure combinations and their corresponding tilt angles. The module workspace can be seen in Figure 12.  
The pointcloud matrix structure is organized as seen in Equation (10)  
\[\mathbf{P}_{PC}=[\alpha_{x},\alpha_{y},P_{1C},P_{2C},P_{3C}] \tag{10}\]  
where \(\alpha_{x}\) and \(\alpha_{y}\) are the measured stable tilt angles which are the result of corresponding input pressures for the respective bellows \(P_{1C}\), \(P_{2C}\) and \(P_{3C}\). Because of over-actuation and the parallel nature of the module design, one orientation of the module is achievable by an infinite combination of input pressures. This can be seen in Figure 13. Here the \(x\)-axis and \(y\)-axis are the tilt about the respective axis in degrees and the \(z\)-axis is the aggregate pressure, which is the sum of all bellows input pressures in bars. A higher aggregate pressure corresponds to a higher mechanical stiffness of the system. The control algorithm needs to take this into account. Figure 12: Module workspace. Figure 13: Aggregate pressure augmented workspace. The experimentally measured data represents points in aggregate pressure-augmented workspace. To find the inlet pressures from the measured point-cloud, Algorithm 1 was applied. ```
Reference tilt angles \(\alpha_{xref}\), \(\alpha_{yref}\), required aggregate pressure level \(P_{agr}\) and \(P_{PC}=[\alpha_{x},\alpha_{y},P_{1C},P_{2C},P_{3C}]\) Output: Required bellows input pressures \(P_{1}\), \(P_{2}\) and \(P_{3}\) to reach \(\alpha_{xref}\) and \(\alpha_{yref}\) whileisEmpty(Region) do  Add all points to Region that pass the criterion: \(\sqrt{(\alpha_{xcloud}-\alpha_{xref})^{2}}\leq\) anT & \(|P_{1 cloud}+P_{2 cloud}+P_{3 cloud}-P_{agr}|\leq\) aggrT ifisEmpty(Region) then \(anT=anT+\) incrementAngle \(aggrT=aggrT+\) incrementPressure endif endwhile  Find point \(\mathbf{Q}\in Region\) with minimal expression \(\sqrt{(\alpha_{xregion}-\alpha_{xref})^{2}-(\alpha_{yregion}-\alpha_{yref})^{2}}\) if\(\sqrt{(\alpha_{xQ}-\alpha_{xref})^{2}-(\alpha_{yQ}-\alpha_{yref})^{2}}\leq\) acceptableTol then \([P_{1},P_{2},P_{3}]=[P_{1Q},P_{2Q},P_{3Q}]\) else \([P_{1},P_{2},P_{3}]=[mean(P_{1r}),mean(P_{2r}),mean(P_{PQ})]\) endif
```  
**Algorithm 1** Extract required bellows input pressures from point cloud  
_Region_-matrix of measured input pressures and corresponding posture that will be used to calculate the ended required input pressures to reach the desired posture; \(anT\)-maximum Euclidean distance of a measured point from the reference point in the augmented workspace in the \(\alpha_{x}\)\(\alpha_{y}\) plane to be eligible for inclusion in _Region_; \(aggrT\)-maximum Euclidean distance of a measured point from the reference point in the augmented workspace along the aggregate pressure axis to be eligible for inclusion in _Region_; \(incrementAngle\)-increment to expand \(anT\) in case the previous search yielded empty _Region_; \(incrementPressure\)-increment to expand \(aggrT\) in case the previous search yielded empty _Region_. Algorithm 1 will already supply a set of usable input pressures. Unfortunately, the results are influenced by the errors in measurement and effects of hysteresis. In a smooth trajectory tracking task, this can produce erratic, non-smooth input pressures. To solve these issues, the above Algorithm 1 was supplied with a set of reference angles ranging from \(-10^{\circ}\) to \(10^{\circ}\) with an increment of 0.05\({}^{\circ}\) for both \(\alpha_{x}\) and \(\alpha_{y}\) and a constant aggregate pressure \(P_{agr}\). The result is three 3D meshes representing the relationship between the reference angles and the three input pressures separately.