1 Introduction

A microswimmer is a microscopic object (i.e., of size in the range 1–\(100\times 10^{-6}\) m) with the ability to move in a fluid environment. Examples coming from nature include sperm cells, bacteria, parasites carrying potentially deadly diseases (e.g. the plasmodium sporozoite responsible for transmission of malaria), unicellular algae, protists, and protozoa (in particular: ciliates, flagellates). Since swimming is crucial in carrying out their biological function, understanding the mechanics of swimming for these living creatures is important; the reviews [1,2,3,4,5] and the many references cited therein can provide ample material for an introduction to the subject. At the same time, the motility of small living organisms is inspiring new concepts and constructs for small scale motile robots and devices, with many potential applications in the biomedical sector ranging from minimally invasive endoscopic and surgical devices, to targeted drug delivery, see, e.g., [6,7,8,9]. The most basic navigation problem for an artificial microswimmer is to predict the swimming speed on the basis of the geometry of the swimmer and of the characteristics of the motor. This problem has been formulated by Purcell in his seminal papers [10, 11], where the problem is also elegantly solved for a swimmer made of a rigid head and a rigid rotating helical tail (bio-inspired by the body architecture of the bacterium Escherichia coli), assuming that hydrodynamic interactions between head and tail are negligible. More recent extensions to include explicitly the effect of these hydrodynamic interactions, the presence of surrounding walls, or the effect of non-negligible inertial forces are discussed, for example, in [12,13,14].

Investigating biology with the functionalist viewpoint of the engineer often leads to new understanding of biological mechanisms and functions, while modeling the mechanics of life-like miniature machines can lead to the design of novel bio-inspired artificial constructs with superior performance. In this two-way interaction between biology and engineering, mathematical modeling plays an important role in that it allows to distill the essence of the success of some specific mechanism, phrase in the portable language of mathematical formalisms, and make it available to applications at different length scales, or based on different material systems, that can be quite different from the one that initially prompted the research. In this paper, we focus on robotic microswimmers whose body architecture is based on rotating tails attached to a rigid head and mimics the one of bacteria. We consider navigation and control problems inspired by those typically posed in the context of unmanned aerial vehicles (drones) see, e.g., [15, 16]. We extend and adapt the techniques used in that field to the context of microswimming. In doing so, we follow Purcell [10] and consider, for simplicity, the case in which hydrodynamic interactions among the main body (hull) and the propulsive units (rotors) can be neglected. Through the analysis of some specific model systems, we show how to formulate and solve some navigation problems. The direct swimming problem consists in solving for the dynamics of the swimmer, namely, predicting velocity and trajectories of the swimmer as a consequence of prescribed rotation rates of the rotors. The inverse swimming problem (namely, find the rotation rates of the rotors to best approximate desired translational and rotational velocities and, ultimately, target trajectories) is a classical control problem. We anticipate and hope that this viewpoint will be useful also in future studies of microswimmers of biological interest, and in the design of new bio-inspired robotic constructs that can find interesting applications as biomedical devices.

2 Equations of motion

We consider a model micro-swimmer composed of a rotationally symmetric head (the cargo or resistive unit, which can be used as a hull to contain a payload, and that we model as a prolate ellipsoid of revolution along the longitudinal axis with unit vector \({\mathbf{e}}_{3}\)) and four rotors (propulsive units shaped as either helical tails or marine propellers) with axes of rotation parallel to the longitudinal axis of the hull and rigidly attached to the hull with a fixed eccentricity e (the same eccentricity for all four propulsive units, for simplicity). Formally, we denote the ellipsoidal body of the microswimmer (the hull) as \({{\mathcal{B}}}_{h}\), the propulsive rotors as \({{\mathcal{B}}}_{p,i}\), \(i=1,\ldots ,4\), and we denote the swimmer body as \({{\mathcal{B}}}\), which is the union of \({{\mathcal{B}}}_{h}\) and of all the \({{\mathcal{B}}}_{p,i}\). The position vector with respect to the center gravity of \({{\mathcal{B}}}_{h}\) of the i-th rotor is denoted by \({{\mathbf{r}}}_{i}\) and we will assume \({{\mathbf{r}}}_{i}=h{{\mathbf{e}}}_{3} + e ({{\mathbf{r}}}_{i})^{\perp }\), where \(({{\mathbf{r}}}_{i})^{\perp }\) is the unit vector obtained by normalizing the projection of \({{\mathbf{r}}}_{i}\) in the plane perpendicular to \({{\mathbf{e}}}_{3}\), so that all the rotors have the same offset along the longitudinal axis h, and the same eccentricity e. We refer to Fig. 1 for a sketch of the geometry of the micro-swimmer.

Fig. 1
figure 1

Sketch of the geometry of the micro-swimmer

For the rotors we will consider several different designs, including single helical tails, double helical tails of higher symmetry, and marine propellers, as discussed below. The fluid environment in which the robot moves is a Newtonian viscous fluid (air, water, glycerol, etc.) flowing at low Reynolds numbers, so that inertial forces can be neglected and its fluid dynamics is governed by the following (Stokes) equations:

$$\begin{aligned} \left\{ \begin{array}{ll} \nabla \cdot {\mathbf{u}}({\mathbf{x}})=0 &{}\quad \forall {\mathbf{x}}\in {\mathbb{R}}^{3}\backslash {{\mathcal{B}}}\\ \\ -\nabla p({\mathbf{x}}) + \mu \Delta {\mathbf{u}}({\mathbf{x}}) = 0 &{}\quad \forall {\mathbf{x}}\in {\mathbb{R}}^{3}\backslash {{\mathcal{B}}}\\ \\ \Vert {\mathbf{u}}({\mathbf{x}})\Vert , p({\mathbf{x}}) \rightarrow 0 &{}\quad {\text{for}}\; \Vert {\mathbf{x}} \Vert \rightarrow +\infty \\ \\ {\mathbf{u}}({\mathbf{x}})={\mathbf{v}}({\mathbf{x}}) &{}\quad \forall \; {\mathbf{x}} \in \partial {{\mathcal{B}}} \end{array} \right. \end{aligned}$$
(1)

Here the volume of the fluid surrounding the body \({{\mathcal{B}}}\) extends to the whole space \({\mathbb{R}}^{3}\) (i.e., no confining walls are considered, for simplicity), \({\mathbf{u}}({\mathbf{x}})\in {\mathbb{R}}^{3}\), \(p({\mathbf{x}}) \in {\mathbb{R}}\) are, respectively, the velocity and pressure of the fluid at a generic point \({\mathbf{x}}\in {\mathbb{R}}^{3}{\backslash } {{\mathcal{B}}}\), while \(\mu >0\) is the fluid dynamic viscosity and \({\mathbf{v}} \in {\mathbb{R}}^{3}\) is the velocity vector field of the solid swimmer. Equality between the velocity of the fluid and of the solid at points on the boundary of the swimmer, where the two are in contact, is the no-slip boundary condition. We consider a neutrally buoyant solid swimmer, and neglect inertial and gravity forces. The equations of motion reduce to the balance of generalized viscous forces (i.e., forces and moments, e.g., with respect to the center of mass of the swimmer’s body) exerted by the fluid on the swimmer. The center of mass of the body of the swimmer is denoted by \({\mathbf{G}}\), and its orientation is described by a time-parametrized rotation that maps the orientation at time \(t=0\), which we assume to coincide with the orientation of the lab frame, to the current orientation (the one of the body frame at time t) according to \({{\mathbf{e}}}_{i}(t)={\mathbb{Q}}(t){{\mathbf{e}}}_{i}(0)\), with \({\mathbb{Q}}(0)={\mathbb{I}}\), the identity matrix. Translational and rotational velocities of the body of the swimmer are related to positional and orientational variables by the equations

$$\begin{aligned} \frac{d}{dt} {\mathbf{G}}(t)= {\mathbf{U}}(t) , \quad \left( \frac{d}{dt} {\mathbb{Q}}(t) \right) {\mathbb{Q}}^{T}(t)= \check{{\varvec{\Omega }}}(t) \end{aligned}$$
(2)

where we have denoted with \({\check{\varvec{\Omega }}}\) the axial tensor associated with \(\varvec{\Omega }\), i.e., the skew-symmetric tensor such that \({\check{\varvec{\Omega }}} {{\mathbf{v}}}= {\varvec{\Omega }}\times {{\mathbf{v}}}\) for every vector \({{\mathbf{v}}}\).

In view of the linearity of the Stokes system (1), the generalized viscous forces exerted by the fluid on the swimmer are linear functions of the translational and rotational velocities of the swimmer \({\mathbf{U}},{\varvec{\Omega }}\) and of the rotational velocities of the rotors \({\varvec{\omega }}_{i}=\omega _{i}{{\mathbf{e}}}_{3}\), so that the equations of motion of the swimmer can be written as

$$\begin{aligned} {{\mathbb{F}}_{tot}} \begin{bmatrix} {{\mathbf{U}}} \\ {\varvec{\Omega }} \\ \end{bmatrix} + {\mathbb{P}}\begin{bmatrix} \omega _{1} \\ \omega _{2} \\ \omega _{3} \\ \omega _{4} \\ \end{bmatrix} = \begin{bmatrix} {\mathbf{0}}\\ {\mathbf{0}}\\ \end{bmatrix} \end{aligned}$$
(3)

Here the \(6\times 6\) grand resistance matrix \({{\mathbb{F}}_{tot}}\) contains the hydrodynamic resistive coefficients for rigid motions of the swimmer, and the i-th column of the \(6\times 4\) propulsive matrix \({\mathbb{P}}\) contains forces and torques generated by the i-th rotor turning at unit speed while all other rotors are still (\(\omega _{i}=1\), \(\omega _{j}=0\) for \(j \ne i\)) and the hull is not moving (\({\mathbf{U}}={\varvec{\Omega }}={{\mathbf{0}}}\)). The procedure to construct these matrices is further described below. Following [10, 11] we use additivity of resistance forces contributed by the individual components of the swimmer (this approximation arises from neglecting hydrodynamic interactions between the various parts of the composite swimmer, see the discussion in Sect. 7) and write

$$\begin{aligned} {\mathbb{F}}_{tot}= {\mathbb{F}}_{h} + \sum _{i=1}^{4} {\mathbb{F}}_{p,i} + \sum _{i=1}^{4} {\mathbb{F}}_{e,i} \end{aligned}$$
(4)

where

$$\begin{aligned} {\mathbb{F}}_{h}=\left[ \begin{array}{c|c} {\mathbb{K}}_{h} &{} {\mathbb{C}}_{h}\\ \hline {\mathbb{C}}^{T}_{h} &{} {\mathbb{W}}_{h} \end{array}\right] , \quad {\mathbb{F}}_{p,i}= \left[ \begin{array}{c|c} {\mathbb{K}}_{p,i} &{} {\mathbb{C}}_{p,i}\\ \hline {\mathbb{C}}^{T}_{p,i} &{} {\mathbb{W}}_{p,i} \end{array}\right] \end{aligned}$$
(5)

are the grand resistance matrices of the hull and the i-th rotor, respectively, each partitioned in \(3\times 3\) blocks containing translational (\({\mathbb{K}}\)), coupling (\({\mathbb{C}}\)) and rotational (\({\mathbb{W}}\)) resistance coefficients, while

$$\begin{aligned} {\mathbb{F}}_{e,i} = \left[ \begin{array}{c|c} {\mathbb{O}} &{} {\mathbb{K}}_{p,i}({\check{\varvec{r}}}_{\varvec{i}})^{T} \\ \hline ({\check{\varvec{r}}}_{\varvec{i}}){\mathbb{K}}_{p,i} &{} ({\check{\varvec{r}}}_{\varvec{i}}){\mathbb{C}}_{p,i}+{\mathbb{C}}^{T}_{p,i}({\check{\varvec{r}}}_{\varvec{i}})^{T} +({\check{\varvec{r}}}_{\varvec{i}}){\mathbb{K}}_{p,i}({\check{\varvec{r}}}_{\varvec{i}})^{T} \end{array} \right] \end{aligned}$$
(6)

where \(({\check{\varvec{r}}}_{\varvec{i}})\) is the axial tensor associated with \({\varvec{r}}_{\varvec{i}}\), the position vector of the i-th rotor with respect to \({\mathbf{G}}\). Matrices \({\mathbb{F}}_{e,i}\) contain the transport terms due to the eccentricity of the rotors, and are needed to account for the fact that the moments in the grand resistance matrices \({\mathbb{F}}_{p,i}\) are computed with respect to the center of mass of the i-th rotor, while the last three equations in (3) express the vanishing of the moment with respect to the center of mass of the swimmer body. Moreover, again due to the possible eccentricity of the rotors, a rotational motion around the center of the hull \({\mathbf{G}}\) with angular velocity \({\varvec{\Omega }}\) induces a translational velocity of the i-th rotor given by \({\varvec{\Omega }}\times {{\mathbf{r}}}_{i}\). Clearly, all these contributions vanish in the case \({{\mathbf{r}}}_{i}=0\). Finally, recalling that \({\varvec{\omega }}_{i}=\omega _{i} {{\mathbf{e}}}_{3}\), the i-th column of the \(6\times 4\) propulsion matrix \({\mathbb{P}}\) is given by

$$\begin{aligned} {\mathbb{P}}_{i} = \left[ \begin{array}{c} ({\mathbb{C}}_{p,i}){{\mathbf{e}}}_{3} \\ \hline ({\mathbb{W}}_{p,i}+{\check{\varvec{r}}}_{\varvec{i}}{\mathbb{C}}_{p,i} ) {{\mathbf{e}}}_{3} \end{array} \right] \end{aligned}$$
(7)

More in detail, the coefficients of the grand resistance matrices (5) are obtained from the following representation formulas for the hydrodynamic forces and moments on the hull and on the i-th rotor

$$\begin{aligned} {\left\{ \begin{array}{ll} {\mathbf{f}}_{h} = {\mathbb{K}}_{h} {\mathbf{U}} + {\mathbb{C}}_{h} {\varvec{\Omega }}\\ {\varvec{\tau }}_{h} = ({\mathbb{C}}_{h})^{T} {\mathbf{U}}+ {\mathbb{W}}_{h} {\varvec{\Omega }} \\ {\mathbf{f}}^{(i)} = {\mathbb{K}}_{p,i}\Big ({\mathbf{U}} + \varvec{\varvec{\Omega }} \times {\mathbf{r}}_{i} \Big ) + {\mathbb{C}}_{p,i} \left( \varvec{\varvec{\Omega }} +{\varvec{\omega }}_{i} \right) \\ {\varvec{\tau }}^{(i)} = ({\mathbb{C}}_{p,i})^{T}\Big ({\mathbf{U}} + {\varvec{\Omega }}\times {\mathbf{r}}_{i}\Big )+ {\mathbb{W}}_{p,i}\left( {\varvec{\Omega }} +{\varvec{\omega }}_{i} \right) \end{array}\right. } \end{aligned}$$
(8)

where \({\mathbf{f}}_{h}\) is the total force on the hull and \({\varvec{\tau }}_{h}\) is the total moment with respect to the hull center of gravity \({\mathbf{G}}\) of the forces acting on the hull, \({\mathbf{f}}^{(i)}\) represents the force acting on the i-th rotor, \({\varvec{\tau }}^{(i)}\) is the moment computed with respect to the center of gravity of the i-th propeller \({\mathbf{G}}_{p,i}\), and \({\mathbf{r}} _{i}(t)= {\mathbb{Q}}(t){\mathbf{r}}_{i}(0)\) is the position vector of the i-th rotor with respect to the center of gravity \({\mathbf{G}}\) of the hull. Computing the total force and the total moment with respect to \({\mathbf{G}}\) of all the forces in (8), and factoring out \({\mathbf{U}}\), \({\varvec{\Omega }}\), and \(\omega _{i}\), we obtain the equations of motion (3), with coefficients given by (4)–(7).

3 An ideal swimmer with high symmetry

It is useful to consider an ideal swimmer (that is endowed with complete rotational symmetry, and for which the structure of the matrices containing the hydrodynamic coefficients is particularly simple, thanks to many cancellations) with the property that selected swimming problems can be solved analytically. These closed form solutions will be used as conceptual benchmarks for swimming problems formulated on more realistic swimmer geometries, that can be solved only numerically, as discussed later in Sect. 6.

The grand resistance matrix of the swimmer body (the hull) is assumed of the form

$$\begin{aligned} {\mathbb{F}}_{h}= \begin{bmatrix} K_{11,h} &{} 0 &{} 0 &{} 0 &{} 0 &{} 0\\ 0 &{} K_{11,h} &{} 0 &{} 0 &{} 0 &{} 0\\ 0 &{} 0 &{} K_{33,h} &{} 0 &{} 0 &{} 0\\ 0 &{} 0 &{} 0 &{} W_{11,h} &{} 0 &{} 0\\ 0 &{} 0 &{} 0 &{} 0 &{} W_{11,h} &{} 0\\ 0 &{} 0 &{} 0 &{} 0 &{} 0 &{} W_{33,h} \end{bmatrix} \end{aligned}$$
(9)

Notice that the equation above gives the components of the grand resistance matrix with respect to the body frame, which we have chosen to be aligned with the principal axes of inertia of the swimmer body, whose longitudinal axis is parallel to \({{{\mathbf{e}}}}_{3}\). These components are invariant with time. This is natural since viscous drag coefficients reflect the shape of the object, which is seen invariant in the body frame. We are assimilating here the hull to an ellipsoid of revolution, and we are neglecting the presence of rigid links anchoring the rotors to the swimmer body. In Sect. 6 we will model explicitly these links, and the structure of the matrix will be slightly perturbed. The grand resistance matrix of the i-th rotor is assumed of the form

$$\begin{aligned} {\mathbb{F}}_{p,i}&= \left[ \begin{array}{c|c} {\mathbb{K}}_{p,i} &{} {\mathbb{C}}_{p,i}\\ \hline {\mathbb{C}}^{T}_{p,i} &{} {\mathbb{W}}_{p,i} \end{array}\right] \nonumber \\&= \begin{bmatrix} K_{11,p,i} &{} 0 &{} 0 &{} C_{11,p,i} &{} C_{12,p,i} &{} 0\\ 0 &{} K_{11,p,i} &{} 0 &{} C_{21,p,i} &{} C_{22,p,i} &{} 0\\ 0 &{} 0 &{} K_{33,p,i} &{} 0 &{} 0 &{} C_{33,p,i}\\ C_{11,p,i} &{} C_{21,p,i} &{} 0 &{} W_{11,p,i} &{} 0 &{} 0\\ C_{12,p,i} &{} C_{22,p,i} &{} 0 &{} 0 &{} W_{11,p,i} &{} 0\\ 0 &{} 0 &{} C_{33,p,i} &{} 0 &{} 0 &{} W_{33,p,i} \end{bmatrix} \end{aligned}$$
(10)

We will consider two cases. Either the rotors are all equal, or else the first two propellers have one chirality (e.g., they are both left-handed helical filaments), and the other two have opposite chirality (e.g., they are both right-handed helical filaments). We assume that the unit vectors \({{\mathbf{e}}}_{1}\), \({{\mathbf{e}}}_{2}\) are parallel to the links between hull and propellers shown in Fig. 2. The first case is illustrated in Fig. 2, case (a). All rotors have the same grand resistance matrix, given by

$$\begin{aligned} {\mathbb{F}}_{p,i}= \begin{bmatrix} K_{11,p} &{} 0 &{} 0 &{} C_{11,p} &{} C_{12,p} &{} 0\\ 0 &{} K_{11,p} &{} 0 &{} C_{21,p} &{} C_{22,p} &{} 0\\ 0 &{} 0 &{} K_{33,p} &{} 0 &{} 0 &{} C_{33,p}\\ C_{11,p} &{} C_{21,p} &{} 0 &{} W_{11,p} &{} 0 &{} 0\\ C_{12,p} &{} C_{22,p} &{} 0 &{} 0 &{} W_{11,p} &{} 0\\ 0 &{} 0 &{} C_{33,p} &{} 0 &{} 0 &{} W_{33,p} \end{bmatrix},\quad i=1,\ldots ,4 ,\quad {\text{case (a)}} \end{aligned}$$
(11)

The propulsive matrix for this case is then given by

$$\begin{aligned} {\mathbb{P}}^{+}&= \begin{bmatrix} 0 &{} 0 &{} 0 &{} 0 \\ 0 &{} 0 &{} 0 &{} 0\\ C_{33,p} &{} C_{33,p} &{} C_{33,p} &{} C_{33,p} \\ 0 &{} C_{33,p}\cdot e &{} 0 &{} -C_{33,p}\cdot e \\ -C_{33,p}\cdot e &{} 0 &{} C_{33,p}\cdot e &{} 0 \\ W_{33,p} &{} W_{33,p} &{} W_{33,p} &{} W_{33,p} \end{bmatrix},\quad {\text{case (a)}} \end{aligned}$$
(12)
Fig. 2
figure 2

The two configurations of the rotors as seen from \({{\mathbf{e}}}_{3}\) (top-view): a all rotors with same chirality and same angular velocity (left), b opposite rotors with opposite chirality and opposite angular velocity. The directions of the links joining the rotors to the hull are used to define the unit vectors \({{\mathbf{e}}}_{1}\), \({{\mathbf{e}}}_{2}\) of the body frame

The second case is illustrated in Fig. 2, case (b). In this case we have

$$\begin{aligned} C_{33,p,3}=C_{33,p,4}= -C_{33,p,1}=-C_{33,p,2},\quad {\text{case (b)}} \end{aligned}$$
(13)

in Eq. (10) (these coupling coefficients change sign because of the change of chirality) and the propulsive matrix is given by

$$\begin{aligned} {\mathbb{P}}^{-}&= \begin{bmatrix} 0 &{} 0 &{} 0 &{} 0 \\ 0 &{} 0 &{} 0 &{} 0\\ C_{33,p} &{} C_{33,p} &{} -C_{33,p} &{} -C_{33,p} \\ 0 &{} C_{33,p}\cdot e &{} 0 &{} C_{33,p}\cdot e \\ -C_{33,p}\cdot e &{} 0 &{} -C_{33,p}\cdot e &{} 0 \\ W_{33,p} &{} W_{33,p} &{} W_{33,p} &{} W_{33,p} \end{bmatrix},\quad {\text{case (b)}} \end{aligned}$$
(14)

Again, we refer to Sect. 6 for examples of grand resistance and propulsion matrices arising for concrete examples of realistic rotors, shaped as either helical tails or as marine propellers, and computed by solving numerically outer Stokes problems of the type (1), with suitable assignments of the swimmer velocity field \({\mathbf{v}}\).

4 Swimming problems: solutions for the ideal swimmer

Substituting the hydrodynamic coefficients for the ideal swimmers given by Eq. (9) and either Eqs. (11)–(12) or Eqs. (13)–(14) into the equations of motion (3), we can formulate and solve analytically some physically relevant navigation problems that can be used as conceptual benchmarks for the discussion of more complex cases, for which only numerical simulation is feasible.

4.1 Direct swimming problem

The direct swimming problem consists in predicting the velocity of the swimmer in response to prescribed rotation rates of the rotors. In other words, given the components of the vector of rotor velocities \(\omega\) as data, solve the equations of motion (3) in terms of the unknown translational and rotational velocities. Since the \(6\times 6\) matrix \({\mathbb{F}}_{tot}\) is invertible, there is a unique solution for any arbitrary assignment of the rotor velocities \(\omega _{i}\), \(i=1,\ldots ,4\), namely,

$$\begin{aligned} \begin{bmatrix} {\mathbf{U}} \\ {\varvec{\Omega }} \\ \end{bmatrix} = -{\mathbb{F}}_{tot}^{-1}{\mathbb{P}}{\varvec{\omega }} \end{aligned}$$
(15)

We are interested in particular to the following two concrete problems. For the ideal swimmer with identical rotors, case (a), consider equal rotor velocities

$$\begin{aligned} \omega _{1}= \omega _{2} = \omega _{3} = \omega _{4} = \omega \end{aligned}$$
(16)

Using Eqs. (9), (11), and (12), Eq. (15) becomes

$$\begin{aligned} \begin{bmatrix} {\mathbf{U}} \\ {\varvec{\Omega }} \\ \end{bmatrix} = -{\mathbb{F}}_{tot}^{-1}{\mathbb{P}}^{+} \begin{bmatrix} 1 \\ 1 \\ 1 \\ 1 \end{bmatrix} \omega = -{\mathbb{F}}_{tot}^{-1} \begin{bmatrix} 0 \\ 0 \\ 4C_{33,p} \\ 0 \\ 0 \\ 4W_{33,p} \end{bmatrix} \omega \end{aligned}$$
(17)

Its solution is given by \(U_{1}=U_{2}=\Omega _{1}=\Omega _{2}=0\) and

$$\begin{aligned} \begin{bmatrix} U_{3} \\ \Omega _{3} \\ \end{bmatrix} = - \begin{bmatrix} K_{33,tot} &{}\quad C_{33,tot} \\ C_{33,tot} &{}\quad W_{33,tot} \end{bmatrix}^{-1} \begin{bmatrix} 4C_{33,p} \\ 4W_{33,p} \end{bmatrix} \end{aligned}$$
(18)

or, more explicitly,

$$\begin{aligned} {\left\{ \begin{array}{ll} U_{3} = 4\dfrac{W_{33,tot}C_{33,p}-C_{33,tot}W_{33,p}}{K_{33,p}W_{33,p}-C_{33,p}^{2}} \omega \\ \Omega _{3}= 4\dfrac{-C_{33,tot}C_{33,p}+K_{33,tot}W_{33,p}}{K_{33,p}W_{33,p}-C_{33,p}^{2}} \omega \end{array}\right. } \end{aligned}$$
(19)

We remark that, in this case, it is impossible to have a non-zero translational velocity accompanied by zero rotational velocity. Since it turns out that always \(C_{33} \ll K_{33}, W_{33}\), zero rotational velocity con only occur if \(\omega =0\), and hence also the translational velocity must vanish. For the ideal swimmer with opposite rotors having opposite chirality, case (b), we are interested in the case

$$\begin{aligned} \omega _{3}= \omega _{4} = -\omega _{1} = -\omega _{2} = -\omega \end{aligned}$$
(20)

and Eq. (15) becomes

$$\begin{aligned} \begin{bmatrix} {\mathbf{U}} \\ {\varvec{\Omega }} \\ \end{bmatrix} = -{\mathbb{F}}_{tot}^{-1}{\mathbb{P}}^{-} \begin{bmatrix} 1 \\ 1 \\ -1 \\ -1 \end{bmatrix} \omega = -{\mathbb{F}}_{tot}^{-1} \begin{bmatrix} 0 \\ 0 \\ 4C_{33,p} \\ 0 \\ 0 \\ 0 \end{bmatrix} \omega \end{aligned}$$
(21)

Its solution is given by \(U_{1}=U_{2}=\Omega _{1}=\Omega _{2}=\Omega _{3}=0\) and the only non-vanishing velocity component is

$$\begin{aligned} U_{3} = 4\dfrac{C_{33,p}}{K_{33,tot}}\omega \end{aligned}$$
(22)

We remark that, in this case, it is possible to have a non-zero translational velocity accompanied by zero rotational velocity. As discussed in more detail in Sect. 5, and as it is intuitively obvious, this leads to straight trajectories along the initial orientation of the longitudinal axis of the body swimmer \({{\mathbf{e}}}_{3}(0)\), with no rotations along the body axis (purely translational motion along a straight line parallel to \({{\mathbf{e}}}_{3}(0)\)).

4.2 Inverse swimming problem

The inverse swimming problem consists in determining rotation rates \(\omega _{i}\), \(i=1,\ldots ,4\) of the rotors to best approximate a set of translational and rotational velocities and, ultimately, a target trajectory. Arranging the \(\omega _{i}\) in a vector \({\varvec{\omega }}= \begin{bmatrix} \omega _{1},\omega _{2},\omega _{3},\omega _{4}\end{bmatrix}^{T}\) of unknowns, and the components of \(\mathbf{U}\) and \({\varvec{\Omega }}\) in a vector \({\mathbf{v}}= \begin{bmatrix} U_{1},U_{2},U_{3},\Omega _{1},\Omega _{2},\Omega _{3}\end{bmatrix}^{T}\) of data, we can rewrite the equations of motion (3) in the standard form \({\mathbb{A}}{\mathbf{x}}={\mathbf{b}}\) as follows

$$\begin{aligned} {\mathbb{P}}{\varvec{\omega }} = {\mathbb{F}}_{tot}{\mathbf{v}} \end{aligned}$$
(23)

The \(6\times 4\) matrix \({\mathbb{P}}\) is clearly not invertible and there exist data \({\mathbf{v}}\) for which Eq. (23) do not have exact solutions. One can then turn to approximate solutions, which are typically not unique. One possible notion of approximate solution of (23) is one that minimizes the error in the least squares sense

$$\begin{aligned} \min _{{\omega }_{i}} \Vert {\mathbb{P}} {\varvec{\omega }} - {\mathbb{F}}_{tot}{\mathbf{v}} \Vert ^{2} \quad {\text{for given }} {\mathbf{v}}\ne 0. \end{aligned}$$
(24)

The pseudo-inverse \({\mathbb{P}} ^{\dagger }\) of the coefficient matrix \({\mathbb{P}}\) is useful to find the solution \({\varvec{\omega }}^{\dagger }\) of (24) with smallest norm \(\Vert {\varvec{\omega }}\Vert =(\sum _{i=1}^{4} \omega _{i}^{2})^{1/2}\). This matrix can be computed starting from the Singular Value Decomposition (SVD) of \({\mathbb{P}}\)

$$\begin{aligned} {\mathbb{P}} = {\mathbb{U}}{\varvec{\Sigma }}{\mathbb{V}}^{T} \end{aligned}$$
(25)

where \({\mathbb{U}}\), \({\mathbb{V}}\) are two orthogonal matrices whose columns contain the left-singular and right-singular vectors of \({\mathbb{P}}\), respectively, and \({\varvec{\Sigma }}\) is a diagonal matrix whose entries are the singular values \(\Sigma _{ii}\) of \({\mathbb{P}}\). The pseudo-inverse \({\mathbb{P}} ^{\dagger }\) of \({\mathbb{P}}\) is then given by

$$\begin{aligned} {\mathbb{P}}^{\dagger } = {\mathbb{U}}{\varvec{\Sigma }}^{\dagger }{\mathbb{V}}^{T} \end{aligned}$$
(26)

where the elements of the diagonal matrix \({\varvec{\Sigma }}^{\dagger }\) are given either by \({\Sigma }^{\dagger }_{ii}=1/\Sigma _{ii}\) if \(\Sigma _{ii}\ne 0\), or by \({\Sigma }^{\dagger }_{ii}=0\) if \(\Sigma _{ii}= 0\). We then obtain

$$\begin{aligned} {\varvec{\omega }}^{\dagger } = {{\mathbb{P}}^{\dagger }}{\mathbb{F}}_{tot}{\mathbf{v}}. \end{aligned}$$
(27)

Concretely, we are interested in the inverse problem of approximating a translational motion with velocity

$$\begin{aligned} {\mathbf{v}} = \begin{bmatrix} 0,\quad 0,\quad U_{3},\quad 0,\quad 0,\quad 0 \end{bmatrix}^{T} \end{aligned}$$
(28)

The interest of this problem is that it leads to a straight trajectory parallel to the initial orientation of the longitudinal axis of the swimmer, joining an initial and a target position along that axis with no energy losses that would accompany wobbling motions around the straight trajectory, and with no rotations around the body axis. Besides saving energy, the last feature would be useful for microswimmers equipped with a camera located inside the hull and pointing along the direction of the body axis. Similarly to what happens with drones hovering above a still target, having no rotations would imply that the still target would not appear rotating in the images collected by the camera, as is desirable. For the ideal swimmer with identical rotors, case (a), the approximate solution (27) corresponding to \({\mathbf{v}}\) given by (28) (translational motion along longitudinal axis of the hull) is, in particular,

$$\begin{aligned} {\varvec{\omega }}^{\dagger }=\frac{1}{4} \left( \frac{C_{33,p} F_{33,tot} + 4W_{33,p}C_{33,p}}{C_{33,p}^{2} + W_{33,p}^{2}} \right) U_{3} \begin{bmatrix} 1 \\ 1 \\ 1 \\ 1 \end{bmatrix} \end{aligned}$$
(29)

Equation (29) above represents only an approximate solution for the inverse problem of pure translational swimming with velocity (28). As it is known from the discussion of the direct swimming problem for the ideal swimmer of type (a), equal rotation rates of the rotors lead to non-zero rotational velocities along the longitudinal axis of the swimmer. For the ideal swimmer with opposite rotors having opposite chiralities, case (b), the approximate solution (27) corresponding to \({\mathbf{v}}\) given by (28) (translational motion along the longitudinal axis of the hull) is

$$\begin{aligned} {\varvec{\omega }}^{\dagger } = \dfrac{1}{4C_{33,p}} F_{33,tot}U_{3} \begin{bmatrix} 1 \\ 1 \\ -1 \\ -1 \end{bmatrix} \end{aligned}$$
(30)

Equation (30) above represents also an exact solution for the inverse problem of pure translational swimming with velocity (28). As it is known from our previous discussion of the direct swimming problem for the ideal swimmer of type (b), if propellers with opposite chirality rotate with angular velocities of equal absolute value and opposite sign, then the motion of the swimmer is a pure translation along the longitudinal axis of the hull.

5 Trajectories

Once the translational and rotational velocities \({\mathbf{U}}\), \({\varvec{\Omega }}\) of the swimmer are known, its trajectory and orientation can be recovered by integrating equations (2), see e.g. [17]. We consider here the case of constant rotor velocities. Since the components in the body frame \(\{{{{\mathbf{e}}}}_{i}\}\), \(i=1,2,3\) of the hydrodynamic matrices in the equations of motion (3) are time-invariant (either exactly or up to a good level of approximation), it is natural to write these equations in the body frame, and to solve for the components of \({{\mathbf{U}}}\), \({\varvec{\Omega }}\) in this frame, which are denoted by \(U_{i}\) and \(\Omega _{i}\), \(i=1,2,3\) and are time-invariant. It follows from (2) that

$$\begin{aligned} \frac{d}{dt} {\mathbf{G}}(t)= & {} \sum _{i=1}^{3} U_{i} {{\mathbf{e}}}_{i}(t) \end{aligned}$$
(31)
$$\begin{aligned} \frac{d}{dt} {{\mathbf{e}}}_{i}(t)= & {} {\varvec{\Omega }}\times {{\mathbf{e}}}_{i}(t) \end{aligned}$$
(32)

and using the skew-symmetric matrix

$$\begin{aligned} {\mathbb{\Lambda }} = \begin{bmatrix} 0 &{}\quad \Omega _{3} &{}\quad -\Omega _{2} \\ -\Omega _{3} &{}\quad 0 &{}\quad \Omega _{1} \\ \Omega _{2} &{}\quad -\Omega _{1} &{}\quad 0 \end{bmatrix} \end{aligned}$$
(33)

we can rewrite the last equation as

$$\begin{aligned} \frac{d}{dt} {{\mathbf{e}}}_{i}(t)= \sum _{i=1}^{3} {\mathbb{\Lambda }}_{ij} {{\mathbf{e}}}_{j}(t). \end{aligned}$$
(34)

We assume that the body frame coincides with the laboratory frame at \(t=0\), and the solution of Eq. (34) is easily expressed in terms of the exponential matrix \({\mathbb{M}}(t)=\exp ({\mathbb{\Lambda }}\, t)\) as

$$\begin{aligned} {{\mathbf{e}}}_{i}(t) = \sum _{i=1}^{3} {\mathbb{M}}_{ij}(t) {{\mathbf{e}}}_{j}(0) \end{aligned}$$
(35)

we then integrate (31) to get the trajectory of the center of gravity. We set

$$\begin{aligned} {\mathbf{U}}_{0}=\sum _{i=1}^{3} U_{i} {{\mathbf{e}}}_{i} (0), \quad U_{0}=\Vert {\mathbf{U}}_{0} \Vert , \quad {\hat{{\mathbf{U}}}}_{0}={\mathbf{U}}_{0}/U_{0} , \end{aligned}$$

and, similarly,

$$\begin{aligned} {\varvec{\Omega }}_{0}=\sum _{i=1}^{3} \Omega _{i} {{\mathbf{e}}}_{i} (0) , \quad \Omega _{0}=\Vert {\varvec{\Omega }}_{0} \Vert , \quad {\hat{\varvec{\Omega }}}_{0}={\varvec{\Omega }}_{0}/\Omega _{0}. \end{aligned}$$

Moreover, we denote by \(\psi = \cos ^{-1}({\hat{{\mathbf{U}}}}_{0}\cdot {{\hat{\varvec{\Omega }}}}_{0})\) the (constant) angle between \({\mathbf{U}}\) and \({\varvec{\Omega }}\), by \({\hat{{{\mathbf{v}}}}}_{0}\) the unit vector perpendicular to both \({\hat{{\mathbf{U}}}}_{0}\) and \({\hat{\varvec{\Omega }}}_{0}\) such that \({\hat{{\mathbf{U}}}}_{0}\times {\hat{\varvec{\Omega }}}_{0}=\sin (\psi ){\hat{{{\mathbf{v}}}}}_{0}\) and set \({\hat{{\mathbf{W}}}}_{0}={\hat{\varvec{\Omega }}}_{0} \times {\hat{{\mathbf{V}}}}_{0}\), so that the triplet \(\{{\hat{{\mathbf{V}}}}_{0},{\hat{{\mathbf{W}}}}_{0},{\hat{\varvec{\Omega }}}_{0}\}\) is an orthonormal basis. We obtain

$$\begin{aligned} {\mathbf{G}}(t) = U_{0}t\cos (\psi ){\hat{\varvec{\Omega }}}_{0}+\dfrac{U_{0}}{\Omega _{0}}\sin (\psi )\Big (\cos (\Omega _{0} t){\hat{{\mathbf{V}}}}_{0}+\sin (\Omega _{0} t){\hat{{\mathbf{W}}}}_{0}\Big ). \end{aligned}$$
(36)

Equation (36) gives the trajectory in the lab frame of the center of gravity \({{\mathbf{G}}}(t)\) starting from \({{\mathbf{G}}}(0)\) at time \(t=0\) and it represents a circular helix with axis parallel to \({\hat{\varvec{\Omega }}}_{0}\). The straight trajectories of Sect. 4 are a special case corresponding to \({{\mathbf{U}}}\) parallel to \({\varvec{\Omega }}\), leading to \(\sin (\psi )=0\). When \({{\mathbf{U}}}\) and \({\varvec{\Omega }}\) are orthogonal, \(\cos \psi =0\) and the helical trajectories (36) degenerate to circular ones (the swimmer swims in circles). We remark that helical trajectories are ubiquitous for biological microswimmers (in particular: unicellular ciliates or flagellates) that swim by beating periodically their cilia or flagella [18,19,20,21]. This is a direct consequence of the invariance (to translations and rotations) of the equations of motion of the swimmer, Eq. (3), written in the body frame. A more precise version of this statement can be found in [22, 23], where it is called the Helix Theorem.

6 Navigation problems and trajectories for realistic geometries

In order to solve concretely the equations of motion (3), the hydrodynamic coefficients contained in the grand resistance matrices \({{\mathbb{F}}}\) (of either the whole swimmer or of one of its parts; we contemplate both cases by referring to the grand resistance matrix of a generic body \({{\mathcal{B}}}\)) and in the propulsion matrix \({\mathbb{P}}\) need to be evaluated. The row index in these matrix identifies the type of generalized force (components of force along \(\{ {{\mathbf{e}}}_{i}\}\), \(i=1,2,3\) for the first three rows, components of the moment with respect to center of gravity along \(\{ {{\mathbf{e}}}_{i}\}\), \(i=1,2,3\) for the second three rows). The column index identifies the type of swimmer motion for which the corresponding generalized force is being evaluated: translation at unit speed along \(\{ {{\mathbf{e}}}_{i}\}\), \(i=1,2,3\) for the first three columns of \({{\mathbb{F}}}\), rotation at unit speed around an axis through the center of gravity and parallel to \(\{ {{\mathbf{e}}}_{i}\}\), \(i=1,2,3\) for the last three columns of \({{\mathbb{F}}}\), rotation at unit speed of the \(i-th\) rotor (while the rest of the swimmer is fixed) for the \(i-th\) column of \({\mathbb{P}}\). We follow here [14] and exploit the reciprocal theorem (see, e.g., [24]) to compute these hydrodynamic coefficients. More in detail, denoting by \({\mathbf{u}}_{i}\) the velocity field in the fluid region \({{\mathcal{B}}}_{ext}{\setminus } {{\mathcal{B}}}\) obtained by solving the outer Stokes problem (1) with prescribed velocity \({{\mathbf{v}}}_{i}\) on the solid \({{\mathcal{B}}}\), the generic hydrodynamic coefficient \({\mathbb{A}}_{ij}\) in matrices \({{\mathbb{F}}}\) and \({\mathbb{P}}\) can be computed as

$$\begin{aligned} {\mathbb{A}}_{ij} = 2\mu \int _{{{\mathcal{B}}}_{ext}{\setminus } {{\mathcal{B}}}} D{\mathbf{u}}_{i}\cdot D{\mathbf{u}}_{j} {\text{d}}V. \end{aligned}$$
(37)

where \(D{\mathbf{u}}\) is the symmetric part of the gradient of the velocity field \({\mathbf{u}}\). Here we are writing \({{\mathcal{B}}}_{ext}\) rather than \({\mathbb{R}}^{3}\) since, in practice, we solve the outer Stokes problem in free space by replacing \({\mathbb{R}}^{3}\) with a large computational box \({{\mathcal{B}}}_{ext}\) and setting \({\mathbf{u}}({\mathbf{x}})=0\) on \({\mathbf{x}}\in \partial {{\mathcal{B}}}_{ext}\). As the row index i and the column index j vary in (37), the Dirichlet data \({{\mathbf{v}}}_{i}\) in the outer Stokes problem (1) scan translations and rotations at unit speed, the \({{\mathbf{v}}}_{j}\) scan translations, rotations, and individual rotor rotation at unit speed, and \({\mathbb{A}}_{ij}\) scans all the coefficients of the matrices \({{\mathbb{F}}}\) and \({{\mathbb{P}}}\). For example, the element \({{\mathbb{K}}}_{ij}\) of the \(3\times 3\) submatrix \({{\mathbb{K}}}\) giving the components of viscous drag (i-th force component) opposing translations at unit speed in the direction of \({{\mathbf{e}}}_{j}\) is

$$\begin{aligned} {\mathbb{K}}_{ij} = 2\mu \int _{{{\mathcal{B}}}_{ext}{\setminus } {{\mathcal{B}}}} D{\mathbf{u}}_{i}\cdot D{\mathbf{u}}_{j} {\text{d}}V. \end{aligned}$$
(38)

where \({\mathbf{u}}_{i}\) (respectively, \({\mathbf{u}}_{j}\)) is the solution of the outer Stokes problem (1) corresponding to a prescribed velocity on the swimmer’s boundary given by \({{\mathbf{v}}}= {{\mathbf{e}}}_{i}\) (respectively, \({{\mathbf{v}}}= {{\mathbf{e}}}_{j}\)). In order to evaluate the hydrodynamic coefficients a CFD program was developed within an MSc thesis by the first author using Pyhton, based on the FEniCSx library, a widespread open-source computing platform that can be executed with good results on a personal computer (Dell XPS 9560 2.8GHz i7-7700HQ with 8 GB RAM in our case). The code has been validated against benchmark results from the literature, comparing both velocity fields with the case of a rotating helix [25], and drag coefficients [26, 27] for a sphere and an ellipsoid in free space, showing that the computational box is large enough and mesh refinement is sufficient to guarantee relative errors of magnitude \(10^{-3}\) with the use of a personal computer. Use of an implementation on a High Performance Computing (HPC) platform allowing larger computational boxes and finer meshes showed smaller relative errors, not exceeding \(10^{-5}\). The HPC code was also written in Python, and based on the FEniCS [28] library, which uses an MPI implementation for parallel computations, and relied, for the solution of the linear systems resulting from the discretization, on the the PETSc library, which provides state-of-the art parallel iterative solvers. The code also allows for more complex configurations, such as the possibility of simulating the hydrodynamic flow around a swimmer in confined environment (e.g. a narrow channel), and of taking inertial effects into account, which becomes a necessity when the size of the swimmer is not microscopic. The Navier–Stokes equations are solved in place of the Stokes equations when needed, at moderate values of Reynolds number. This code was also validated against results from literature, from standard examples of Stokes [29] flow to more complex motions of falling discs and spheres in a fluid at moderate (but non-zero) Reynolds numbers [30, 31]. We collect in the rest of this section the matrices containing the hydrodynamic coefficients for some concrete geometries, illustrated in the figures that follow, and use them to calculate the corresponding trajectories generated by specific choices of rotor velocities, as illustrated below.

The body of the swimmer is the prolate spheroid shown in Fig. 3 with four links of equal length e protruding in directions perpendicualr to the axis of symmetry (parallel to \({{\mathbf{e}}}_{3}\)). The corresponding grand resistance matrix is given in (39). Here, and in all the formulas that follow for the resistance matrices we have used the notation \({\mathrm{e}}x\) to denote \(\times 10^{x}\); the value of the viscosity we have used is always that of glycerol at room temperature (\(\mu =1.0\,\) Pas) and the units of the coefficients are [\(Nsm^{-1}\)] for the \({\mathbb{K}}\) submatrix, [Ns] for the \({\mathbb{C}}\) submatrix, and [Nsm] for the \({\mathbb{W}}\) submatrix.

$$\begin{aligned} \left[ \begin{array}{c|c} {\mathbb{K}} &{} {\mathbb{C}}\\ \hline {\mathbb{C}}^{T} &{} {\mathbb{W}} \end{array}\right] = \begin{bmatrix} 2.38{\mathrm{e}}00&{} 2.83{\mathrm{e}}{-}02 &{} 6.30{\mathrm{e}}{-}03 &{} 1.41{\mathrm{e}}{-}03&{} 1.73{\mathrm{e}}{-}02 &{} 8.36{\mathrm{e}}{-}05\\ 2.83{\mathrm{e}}{-}02 &{} 2.38{\mathrm{e}}00&{} 2.04{\mathrm{e}}{-}03&{} -1.29{\mathrm{e}}{-}02&{} 1.06{\mathrm{e}}{-}03 &{} 3.43{\mathrm{e}}{-}04 \\ 6.30{\mathrm{e}}{-}03 &{} 2.04{\mathrm{e}}{-}03 &{} 2.04{\mathrm{e}}00&{} -1.79{\mathrm{e}}{-}04&{} 5.47{\mathrm{e}}{-}04 &{} -2.72{\mathrm{e}}{-}05\\ 1.41{\mathrm{e}}{-}03&{} -1.29{\mathrm{e}}{-}02&{} -1.79{\mathrm{e}}{-}04 &{} 3.53{\mathrm{e}}{-}02 &{} 5.41{\mathrm{e}}{-}05 &{} 3.29{\mathrm{e}}{-}06\\ 1.73{\mathrm{e}}{-}02 &{} 1.06{\mathrm{e}}{-}03 &{} 5.47{\mathrm{e}}{-}04&{} 5.41{\mathrm{e}}{-}05 &{} 3.54{\mathrm{e}}{-}02 &{} 1.71{\mathrm{e}}{-}05\\ 8.36{\mathrm{e}}{-}05 &{} 3.43{\mathrm{e}}{-}04 &{} -2.72{\mathrm{e}}{-}05 &{} 3.29{\mathrm{e}}{-}06 &{} 1.71{\mathrm{e}}{-}05 &{} 1.12{\mathrm{e}}{-}02 \end{bmatrix}. \end{aligned}$$
(39)

For the rotors we will consider several alternative choices. For the case shaped as a single left-handed helix with axis length L, radius R, and pitch P, illustrated in Fig. 4, the grand resistance matrix \({\mathbb{F}}_{p}\) is given by

$$\begin{aligned} \left[ \begin{array}{c|c} {\mathbb{K}}_{p} &{} {\mathbb{C}}_{p}\\ \hline {\mathbb{C}}^{T}_{p} &{} {\mathbb{W}}_{p} \end{array}\right] = \begin{bmatrix} 8.80{\mathrm{e}}{-}01 &{} -1.99{\mathrm{e}}{-}03 &{} 4.81{\mathrm{e}}{-}03 &{} -2.00{\mathrm{e}}{-}05 &{} 8.76{\mathrm{e}}{-}02 &{} 9.00{\mathrm{e}}{-}05 \\ -1.99{\mathrm{e}}{-}03 &{} 8.79{\mathrm{e}}{-}01 &{} -6.42{\mathrm{e}}{-}03 &{} -8.72{\mathrm{e}}{-}02 &{} -6.90{\mathrm{e}}{-}04 &{} 1.80{\mathrm{e}}{-}04\\ 4.81{\mathrm{e}}{-}03 &{} -6.42{\mathrm{e}}{-}03 &{} 7.52{\mathrm{e}}{-}01 &{} 1.02{\mathrm{e}}{-}03 &{} -1.80{\mathrm{e}}{-}04 &{} 7.40{\mathrm{e}}{-}04 \\ -2.00{\mathrm{e}}{-}05 &{} -8.72{\mathrm{e}}{-}02 &{} 1.02{\mathrm{e}}{-}03 &{} 1.34{\mathrm{e}}{-}02&{} 7.00{\mathrm{e}}{-}05 &{} 6.00{\mathrm{e}}{-}05 \\ 8.76{\mathrm{e}}{-}02 &{} -6.90{\mathrm{e}}{-}04 &{} -1.8{\mathrm{e}}{-}04 &{} 7.00{\mathrm{e}}{-}05 &{} 1.34{\mathrm{e}}{-}02 &{} -1.30{\mathrm{e}}{-}04\\ 9.00{\mathrm{e}}{-}05 &{} 1.80{\mathrm{e}}{-}04 &{} 7.40{\mathrm{e}}{-}04 &{} 6.00{\mathrm{e}}{-}05 &{} -1.30{\mathrm{e}}{-}04 &{} 2.20{\mathrm{e}}{-}04 \end{bmatrix}. \end{aligned}$$
(40)
Fig. 3
figure 3

Ellipsoid hull with minor semi-axes \(a=b= 50 \times 10^{-3}\) m and major semi-axis \(c = 150 \times 10^{-3}\) m, where the trace on the hull surface of the computational mesh for the fluid domain is also shown. The four transversal links have all length \(e= 40\times 10^{-3}\) m

Fig. 4
figure 4

Single left-handed helix. R = \(8.5 \times 10^{-3}\) m, \({\mathrm{L}} = 220 \times 10^{-3}\) m, \({\mathrm{P}} = 53\times 10^{-3}\) m

Considering propellers shaped as double-helices, obtained from the previous ones by adding a second identical helix with the same axis but shifted by a phase-angle \(\pi\), see Fig. 5, we obtain a grand resistance matrix \({\mathbb{F}}_{p}\) given by

$$\begin{aligned} \left[ \begin{array}{c|c} {\mathbb{K}}_{p} &{} {\mathbb{C}}_{p}\\ \hline {\mathbb{C}}^{T}_{p} &{} {\mathbb{W}}_{p} \end{array}\right]&= \begin{bmatrix} 1.78{\mathrm{e}}+00 &{} -3.82{\mathrm{e}}{-}03 &{} 9.30{\mathrm{e}}{-}04 &{} -1.00{\mathrm{e}}{-}05 &{} 1.78{\mathrm{e}}{-}01 &{} 1.40{\mathrm{e}}{-}04 \\ -3.82{\mathrm{e}}{-}03 &{} 1.76{\mathrm{e}}+00 &{} 1.25{\mathrm{e}}{-}03 &{} -1.75{\mathrm{e}}{-}01 &{} -1.42{\mathrm{e}}{-}03 &{} 4.00{\mathrm{e}}{-}05\\ 9.30{\mathrm{e}}{-}04 &{} 1.25{\mathrm{e}}{-}03 &{} 1.49{\mathrm{e}}+00 &{} -9.00{\mathrm{e}}{-}05 &{} 1.00{\mathrm{e}}{-}05 &{} 1.50{\mathrm{e}}{-}03\\ -1.00{\mathrm{e}}{-}00 &{} -1.75{\mathrm{e}}{-}01 &{} -9.00{\mathrm{e}}{-}05 &{} 2.69{\mathrm{e}}{-}02 &{} 1.40{\mathrm{e}}{-}04 &{} -1.00{\mathrm{e}}{-}07\\ 1.78{\mathrm{e}}{-}01 &{} -1.42{\mathrm{e}}{-}03 &{} 1.00{\mathrm{e}}{-}05 &{} 1.40{\mathrm{e}}{-}04 &{} 2.73{\mathrm{e}}{-}02 &{} 2.00{\mathrm{e}}{-}05\\ 1.40{\mathrm{e}}{-}04 &{} 4.00{\mathrm{e}}{-}05 &{} 1.50{\mathrm{e}}{-}03 &{} -1.00{\mathrm{e}}{-}07 &{} 2.00{\mathrm{e}}{-}05 &{} 4.40{\mathrm{e}}{-}04 \end{bmatrix} \end{aligned}$$
(41)
Fig. 5
figure 5

Double left-handed helix, R = \(8.5 \times 10^{-3}\) m, L = \(220 \times 10^{-3}\) m, P = \(53\times 10^{-3}\) m

Realistic geometries do not have perfect rotational symmetries, and the corresponding matrices of hydrodynamic coefficients have less cancellations and fewer zero entries with respect to the ideal case discussed in Sect. 4. The lack of symmetry in the propeller produces trajectories with more pronounced wobbling than in cases where the propellers have higher symmetry. This is true not only in the comparison with the ideal swimmers of Sect. 4, but also in going from the single-helix to the double-helix shape, as shown by the trajectories reported below. The trajectories corresponding to the two choices of propellers of Figs. 4 and 5 are compared below, both in a 3D spatial view with axes XYZ parallel to the axes of the triplet \(\{{\hat{{\mathbf{V}}}}_{0},{\hat{{\mathbf{W}}}}_{0},{\hat{\varvec{\Omega }}}_{0}\}\), and through projections of the trajectory on the XZ plane (see Figs. 6, 7 and 8). From the plot of the projection on the XZ plane of the orthonormal triplet \(\{{{\mathbf{e}}}_{i}(t)\}\), \(i=1,2,3\) defining the body frame it is possible to see that the swimmer with double-helical propeller advances with smaller oscillations around the longitudinal axis. Rotations around the longitudinal axis \({{\mathbf{e}}}_{3}\) are, however, still present also in the more symmetric design.

Fig. 6
figure 6

Trajectories for left-handed single-helical propellers (left) and double-helical ones (right)

Fig. 7
figure 7

XZ plane projection of trajectories for left-handed single-helical propellers (left) and double-helical ones (right)

Fig. 8
figure 8

XZ plane projections of the body frame (the orthonormal triplet \(\{{{\mathbf{e}}}_{i}(t)\}\), \(i=1,2,3\) represented by the colored arrows) for left-handed single-helical propellers (left) and double-helical ones (right)

Finally, two additional rotor geometries were considered, one shaped as a double right-handed helical tail and another one shaped as a marine propeller, as shown in Fig. 9. These shapes included here for comparison, since they have been 3D-printed and their hydrodynamic coefficients have been computed on a HPC platform and validated experimentally, as reported in [14]. The grand resistance matrices for the two propellers shown in Fig. 9 are given by

$$\begin{aligned}&\left[ \begin{array}{c|c} {\mathbb{K}}_{p} &{} {\mathbb{C}}_{p}\\ \hline {\mathbb{C}}^{T}_{p} &{} {\mathbb{W}}_{p} \end{array}\right]&= \begin{bmatrix} 4.16{\mathrm{e}}{-}01 &{} 6.90{\mathrm{e}}{-}04 &{} -3.32{\mathrm{e}}{-}06 &{} -7.42{\mathrm{e}}{-}06 &{} 1.61{\mathrm{e}}{-}02 &{} -4.94{\mathrm{e}}{-}08 \\ 6.90{\mathrm{e}}{-}04 &{} 4.03{\mathrm{e}}{-}01 &{} 2.06{\mathrm{e}}{-}06 &{} -1.56{\mathrm{e}}{-}02 &{} 5.20{\mathrm{e}}{-}04 &{} 2.75{\mathrm{e}}{-}07 \\ -3.32{\mathrm{e}}{-}06 &{} 2.06{\mathrm{e}}{-}06 &{} 3.54{\mathrm{e}}{-}01 &{} 3.83{\mathrm{e}}{-}08&{} -6.06{\mathrm{e}}{-}08 &{} -5.70{\mathrm{e}}{-}04\\ -7.42{\mathrm{e}}{-}06 &{} -1.56{\mathrm{e}}{-}02&{} 3.83e{-}08&{} 9.90{\mathrm{e}}{-}04 &{} -2.16{\mathrm{e}}{-}05 &{} -1.41{\mathrm{e}}{-}08 \\ 1.60{\mathrm{e}}{-}02 &{} 5.20{\mathrm{e}}{-}04 &{} -6.07{\mathrm{e}}{-}08 &{} -2.16{\mathrm{e}}{-}05 &{} 1.01{\mathrm{e}}{-}03 &{} -1.58{\mathrm{e}}{-}09 \\ -4.94{\mathrm{e}}{-}08 &{} 2.75{\mathrm{e}}{-}07 &{} -5.70{\mathrm{e}}{-}04 &{} -1.41{\mathrm{e}}{-}08 &{} -1.58{\mathrm{e}}{-}09 &{} 1.20{\mathrm{e}}{-}04 \end{bmatrix} \end{aligned}$$
(42)
$$\begin{aligned}&\left[ \begin{array}{c|c} {\mathbb{K}}_{p} &{} {\mathbb{C}}_{p}\\ \hline {\mathbb{C}}^{T}_{p} &{} {\mathbb{W}}_{p} \end{array}\right]&= \begin{bmatrix} 1.81e{-}01 &{} 2.58e{-}06 &{} 4.73e{-}06 &{} 2.07e{-}05 &{} 1.96e{-}03 &{} -3.54e{-}07 \\ 2.58e{-}06 &{} 1.81e{-}01 &{} -1.64e{-}07 &{} -1.96e{-}03 &{} 2.07e{-}05 &{} -7.57e{-}08 \\ 4.73e{-}06 &{} -1.64e{-}07 &{} 1.78e{-}01 &{} 5.10e{-}07 &{} 2.24e{-}07 &{} -4.11e{-}05 \\ 2.07e{-}05 &{} -1.96e{-}03 &{} 5.10e{-}07 &{} 4.98e{-}05 &{} 3.51e{-}09 &{} 1.51e{-}09 \\ 1.96e{-}03 &{} 2.07e{-}05 &{} 2.24e{-}07 &{} 3.51e{-}09 &{} 4.98e{-}05 &{} -7.49e{-}09 \\ -3.54e{-}07 &{} -7.57e{-}08 &{} -4.11e{-}05 &{} 1.51e{-}09 &{} -7.49e{-}09 &{} 2.10e{-}05 \end{bmatrix} \end{aligned}$$
(43)
Fig. 9
figure 9

Experimentally tested rotors: double helical tail and marine propeller from [14], geometric data in Table 1. Surfaces used for mesh generation (left) and a detail of the trace of the computational mesh on the propeller blades (right) are shown

The geometric data for the helical tail and the marine propeller of Fig. 9 are reported in Table 1. The resulting 3D trajectories are shown in Fig. 10 while their projection onto the plane XZ are shown in Fig. 11.

Table 1 Geometric data for the propellers in Fig. 9
Fig. 10
figure 10

Trajectories for double left-handed (left) and marine (right) propellers

Fig. 11
figure 11

XZ plane projection of trajectories for double left-handed (left) and marine (right) propellers

The swimming performance of the marine propeller is not good in terms of distance covered along the Z-axis, as expected. This is due to the fact that at low Reynolds numbers inertia is negligible, and thus the rotating blades are not able to generate significant lift. Hence, they produce small propulsive forces. This kind of propeller would fare better in a comparison at moderate Reynolds numbers, as is done in [14]. Such a study however is outside of the scope of the present work. For the single and double helix propellers, simulations are performed for each of the two configurations shown in Fig. 2, and the numerical values of the computed velocities are reported in Table 2 and Table 3. For the double helical tail and marine propellers, only case a) is considered since geometries of opposite chirality have not been studied yet with experiments. In case (b) the velocity of rotation \(\Omega _{3}\) is never exactly zero as in the ideal case of Sect. 3, but it is substantially reduced with respect to case (a), for a propeller of equivalent geometry. For propellers shaped as double-helices this rotational velocity is negligible, leading to good performance in applications requiring an on-board camera housed in the hull, and pointing along the direction of the longitudinal axis.

Table 2 Hull velocities: translational velocities are normalized by dividing by the body size (taken as the major semi-axis length, i.e. 0.15 m) and are in units of body-sizes per second; rotational velocities are expressed as turns per second (i.e. divided by 2\(\pi\)). Case (a): identical rotors, with the same rotational speed \(\omega _{i}=1\,\)rad/s
Table 3 Hull velocities: translational velocities are normalized by dividing by the body size (taken as the major semi-axis length, i.e. 0.15 m) and are in units of body-sizes per second; rotational velocities are expressed as turns per second (i.e. divided by 2\(\pi\)). Case (b): opposite rotors with opposite chirality and equal and opposite rotational speed \(\omega _{i}=\pm 1\,\)rad/s

7 Discussion and perspectives

In conclusion, we have formulated and solved the problem of predicting velocities and trajectories of composite swimmers made of an ellipsoidal head and multiple eccentric rotors, as a consequence of prescribed rotation rates of the propellers (direct swimming problem). Conversely, we have discussed how to find the rotation rates of the propellers to best approximate desired translational and rotational velocities and, ultimately, target trajectories (inverse swimming problem). We have obtained analytical solutions for ideal swimmers with high symmetry, and numerical solutions for more realistic swimmers which do not exhibit full rotational symmetry. Future extensions of this work will examine the role of hydrodynamic interactions. To resolve them, the hydrodynamic coefficients in (3) must be evaluated directly for the whole composite swimmer, along the lines discussed in [13, 14], and cannot be obtained by simply adding the individual contributions of the various parts of the composite swimmer, as in Eqs. (4)–(6). Another possible extension is to consider the presence of surrounding walls and the effect of inertial forces, similarly to what has been done in [14] for a robotic swimmer with a single non-eccentric rotor. The HPC code described in the previous section was developed with the aim of investigating these possible extensions of our work. A further direction worth exploring is to address optimal control problems for best matching of desired (target) trajectories, similarly to what is discussed in [32].