1 Introduction

The field of multi-body dynamics includes rigid and elastic bodies connected in arbitrary ways. Most approaches use a minimal coordinate representation, eliminating redundant variables as the body connections are exploited one at a time until all the bodies are included into the system. One disadvantage of such methods is topology constraints, such as limiting the configuration of the rigid body connections to a topological tree. (See the TREETOPS software developed by company DYNACS [1].) Another computational disadvantage of these approaches is the reliance on transcendental functions to describe the positions of elements. Tensegrity systems [2] dynamics is a subset of the class of multibody dynamics which does not treat (thus far) rigid bodies of arbitrary shape and inertia, but they allow any stabilizable topology of members. Tensegrity is a name coined by Buckminister Fuller [3] for the artform created by Ioganson (1921) and Snelson (1948) [4]. Tensegrity is a network of compressive and tensile members, where the compressive members are connected together by tension members (strings, cables, tendons) forming a stable system. We describe “Class-1” tensegrity when no compressive members touch each other, and a “Class-\(k\)” when \(k\) compressive members join at a node [2]. As all the strings are connected to the node center of the bars, there would be no torque along the axis of the bar and therefore no rotation along the bar axis. Moreover, bars are connected by frictionless ball joints, or their mathematical equivalents, to constraint all members to be “axially loaded” only.

The topology of bar/string networks provides a minimal mass solution to at least five fundamental problems in engineering mechanics. What is the minimal mass material topology to take? (i) Compressive loads? (ii) Torsional loads? (iii) Simply supported bending loads? (iv) Cantilevered bending loads? (v) Tension loads? Tensegrity structures provide the answer to these five questions [2]. These elementary results guide the way toward the choice of elementary building blocks to build more complex structures [2, 5]. The Michell truss is proven to provide the minimum mass solution for cantilevered bending loads [2]. Tensegrity T-bar provides the minimum mass solution to compressive structure assuming no global buckling and D-bar provides minimum mass considering global buckling [2]. Recently, D-bar structure was studied for its use as a sensor or actuator [6]. D-bar shows significant potential in robotics because of its minimum mass and easy deployability [7]. The “tensegrity ball” has been extensively studied for its use as a lander [8, 9], and various impact structures [10]. Easy deployability and less mass are the main motivations for its use in robotics applications [11,12,13], deployable bridges [14, 15], and space applications like deployable masts [16] and artificial gravity space habitats [17, 18]. Various tensegrity architectures also appear in many biological systems, ranging from bone and muscle networks to fibrous structural components in living cells [19] and to the molecular structure of spider fiber [5]. See also tensegrity models for the bio-mechanics of the human skeleton [20, 21].

The dynamics of the tensegrity structures has been explored in the past by various researchers. Murakami [22] developed the equations of motion for tensegrity structures using the Eulerian and Lagrangian approach which basically represent spatial and material formulations. These equations were then linearized about a reference configuration to perform the modal analysis. In part two of [23] quasi-static analyses were performed which concluded that prestress and infinitesimal mechanism modes characterize the dynamics and statics of tensegrity structures. The linearized dynamics models for the different class of tensegrity structures were developed by Sultan et al. [24] and these models were further used by Masic and Skelton [25] to select the prestress for optimal dynamic/control performance. Ali and Smith [26] also wrote a linearized dynamic model around an equilibrium configuration to study the dynamic behavior of an active tensegrity structure. These linearized models are approximations and do not capture the correct dynamics of the structure. Tan and Pellegrino [27] studied the nonlinear vibration of cable-stiffened pantographic deployable structures and showed that cable prestress is correlated with the natural frequencies of the system. Skelton and Nagase [28, 29] developed the nonlinear tensegrity dynamics in vector form for a network of rods and strings neglecting the masses in the strings. Recently, Joono and Skelton [30] developed a second order matrix differential equation to describe the nonlinear dynamics of any tensegrity structure. They used non-minimal coordinates and assumed the compressive elements to have no inertia about the longitudinal axis. The masses in the tension elements (strings) were also neglected in the formulation. In the present study, each compressive member can be a bar of certain radius i.e. can have some inertia about its longitudinal axis and masses in the strings is also incorporated.

At a fundamental level, the dynamics of these structures is straightforward since it relies simply on the dynamics of rigid bars and elastic models for strings. However, a rigorous and scalable approach to describing these structures is highly desirable. The nonlinear dynamic model developed here captures both the translational motion of the mass center of each bar and each cable, and the rotational dynamics of each bar, using Newton’s second law. Therefore, the model allows for the simulation of any tensegrity network with elastic massive string members and rigid bars. Certainly, there are many applications such as cable-stayed bridges in which the mass of the cables is as important as the mass of the bars. Furthermore, applications exist in which a membrane covering the surface of the structure is required. This dynamic model assumed the bars to be rigid and the length constraints are incorporated at the second derivative level in the formulation. This can lead to violations in length constraint during the numerical integration procedure. In the appendix of this paper, we provide an algorithm to correct the bar and time derivative of the bar vector to satisfy the length constraints (Appendix C). The author believes that the other benefits of this formulation outweigh this shortcoming of the paper. Finally, this paper makes the following contributions to the theory and mathematical modeling of tensegrity systems: (i) It adds mass to tensile elements. (ii) It adds string-to-string nodes. (iii) It maintains a matrix-second-order nonlinear differential equation without any transcendental functions. (iv) It provides a novel algorithm to correct the violations in bar length due to computational errors. Moreover, the absence of trigonometric functions leads to improved efficiency and accuracy of the dynamics simulation and control design. These equations are suitable for the design of control algorithms to control shape or other requirements of the system as the control variables (force density in each string) are linear in the dynamics formulation. These force densities can easily be converted into a physical quantity (tensions or rest-lengths of tensile elements) using a nonlinear transformation.

2 Notation

2.1 Vector notation

We distinguish a three-dimensional object that has magnitude and direction by bold letters. These are called Gibbs vectors in honor of the inventor of vector concepts in three-dimensional space [31]. In linear algebra, an \(n\times 1\) matrix is called an \(n\)-dimensional vector, and obviously a \(3\times 1\) matrix would be called a 3-dimensional vector. But these are not Gibbs vectors and will not be bold here. For example, a vector \(\mathbf{v}\) can be expressed in any specified frame of reference. Let the components of vector \(\mathbf{v}\) in a specified set of coordinates be described by the \(3\times 1\) matrix \(v\). The components of the Gibbs vector \(\mathbf{v}\) can be written simply as \(v\), without bold. Scalars are also not bold, so the distinction between scalars and \(3\times 1\) matrices are made clear by the context.

Define a right-handed dextral set of unit vectors by these dot and cross product properties:

  1. (a)

    \(\boldsymbol{e}_{i} \cdot \boldsymbol{e}_{j} = \delta _{ij}\)

  2. (b)

    \(\boldsymbol{e}_{i} \times \boldsymbol{e}_{j} = \boldsymbol{e}_{k}\) if \((i,j,k) = (1,2,3)\) or \((3,1,2)\) or \((2,3,1)\)

Then define a vectrix\(\boldsymbol{\mathcal{E}}\) [32] by

  1. (c)

    E= [ e 1 e 2 e 3 ] , E T = [ e 1 e 2 e 3 ]

  2. (d)

    \(\boldsymbol{\mathcal{E}}^{\mathsf{T}}\cdot \boldsymbol{\mathcal{E}} = I\) (due to (a) and (c))

Hence for two vectors expressed in the same frame (\(\boldsymbol{b} = \boldsymbol{\mathcal{E}} b^{\mathcal{E}}\) and \(\boldsymbol{a} = \boldsymbol{\mathcal{E}} a^{\mathcal{E}}\)), it follows that:

  1. (e)

    \(\boldsymbol{a} \cdot \boldsymbol{b} = (\boldsymbol{\mathcal{E}} a^{\mathcal{E}})^{T} \cdot (\boldsymbol{\mathcal{E}} b^{\mathcal{E}}) = a^{\mathcal{E}^{\mathsf{T}}}(\boldsymbol{\mathcal{E}}^{\mathsf{T}} \cdot \boldsymbol{\mathcal{E}})b^{\mathcal{E}} = a^{\mathcal{E}^{ \mathsf{T}}}b^{\mathcal{E}}\)

  2. (f)

    \(\boldsymbol{a} \times \boldsymbol{b} = (\boldsymbol{\mathcal{E}} a^{\mathcal{E}}) \times (\boldsymbol{\mathcal{E}} b^{\mathcal{E}}) = \boldsymbol{\mathcal{E}} \tilde{a}^{\mathcal{E}} b^{\mathcal{E}}\), a ˜ E = [ 0 a 3 E a 2 E a 3 E 0 a 1 E a 2 E a 1 E 0 ]

where \(\tilde{a}^{\mathcal{E}}\) is a skew-symmetric matrix composed of the 3 elements of \(a^{\mathcal{E}}\), the vector \(\boldsymbol{a}=( \boldsymbol{\mathcal{E}} a^{\mathcal{E}})\).

2.2 Kinematics

Consider a vector \(\boldsymbol{v}\) described in two different reference frames. Let the vectrix E= [ e 1 e 2 e 3 ] denote the dextral set of unit vectors \(\boldsymbol{e}_{i}\) that are inertially fixed. Let the vectrix B= [ b 1 b 2 b 3 ] be the body-fixed dextral set of \(\boldsymbol{b}_{i}\) fixed in the coordinates of the rigid body. Then, the unitary coordinate transformation \(\boldsymbol{\mathcal{B}} = \boldsymbol{\mathcal{E}} \varTheta \) and \(\varTheta ^{\mathsf{T}}\varTheta = I\) leads to

$$\begin{aligned} \boldsymbol{\mathcal{B}} &= \boldsymbol{\mathcal{E}} \varTheta , \quad \varTheta ^{\mathsf{T}}\varTheta = I \rightarrow \varTheta ^{\mathsf{T}} \dot{\varTheta } = \tilde{\omega }^{\mathcal{B}}= \text{skew-symmetric} , \end{aligned}$$
(1)
$$\begin{aligned} \boldsymbol{v} &= \boldsymbol{\mathcal{E}} v^{\mathcal{E}}, \end{aligned}$$
(2)
$$\begin{aligned} &= \boldsymbol{\mathcal{B}} v^{\mathcal{B}}, \quad v^{\mathcal{E}} = \varTheta v^{\mathcal{B}}, \end{aligned}$$
(3)

where \(\varTheta \) represents the Direction Cosine Matrix (always unitary) and \(v^{\mathcal{E}}\), \(v^{\mathcal{B}}\) represent the components of the vector \(\boldsymbol{v}\) as viewed, respectively, in coordinate frame \(\boldsymbol{\mathcal{E}}\) and \(\boldsymbol{\mathcal{B}}\). Then \(\boldsymbol{v}\) and \(\dot{\boldsymbol{v}}\) are simply:

$$\begin{aligned} \boldsymbol{v} &= \boldsymbol{\mathcal{B}}v^{\mathcal{B}}, \end{aligned}$$
(4)
$$\begin{aligned} \dot{\boldsymbol{v}} &= \dot{\boldsymbol{\mathcal{B}}}v^{\mathcal{B}} + \boldsymbol{ \mathcal{B}}\dot{v}^{\mathcal{B}} = \boldsymbol{\mathcal{B}}\bigl[ \tilde{\omega }^{\mathcal{B}} v^{ \mathcal{B}} + \dot{v}^{\mathcal{B}}\bigr], \end{aligned}$$
(5)

where from Eq. (1)

$$ \dot{\boldsymbol{\mathcal{B}}} = \boldsymbol{\mathcal{E}} \dot{\varTheta } = \boldsymbol{\mathcal{B}}\varTheta ^{\mathsf{T}} \dot{\varTheta }=\boldsymbol{ \mathcal{B}}\tilde{\omega }^{\mathcal{B}}, $$
(6)

and the angular velocity of frame \(\boldsymbol{\mathcal{B}}\) relative to frame \(\boldsymbol{\mathcal{E}}\) is

$$ \boldsymbol{\omega } = \boldsymbol{\mathcal{E}}\omega ^{\mathcal{E}} = \boldsymbol{\mathcal{B}}\omega ^{\mathcal{B}}, \quad \omega^{\mathcal{B}} = \begin{bmatrix} \omega _{1}^{\mathcal{B}} \\ \omega _{2}^{\mathcal{B}} \\ \omega _{3}^{\mathcal{B}} \end{bmatrix} . $$
(7)

3 Dynamics of a single bar

3.1 Rotational dynamics

Consider a vector \(\boldsymbol{r}\) locating the center of mass of the bar of length \(l = \|\boldsymbol{b}\|\), where \(\boldsymbol{b}\) is the vector along the bar. Let the vectrix\(\boldsymbol{\mathcal{E}}\) denote the dextral set of unit vectors \(\boldsymbol{e}_{i}\) which are inertially fixed. Let the vectrix\(\boldsymbol{\mathcal{B}}\) be the body-fixed dextral set of unit vectors \(\boldsymbol{b}_{i}\) fixed in the body of the bar, with \(\boldsymbol{b}_{3}\) pointing along the bar.

The bar vector \(\boldsymbol{b}\) of length \(l\), described in body coordinates \(\boldsymbol{\mathcal{B}}\) is:

$$ \boldsymbol{b} = \boldsymbol{\mathcal{B}} b^{\mathcal{B}}, \quad b^{\mathcal{B}} = \begin{bmatrix} 0 & 0 & l \end{bmatrix} ^{\mathsf{T}} $$
(8)

and the time rate of change of the vector \(\boldsymbol{b}\) is

$$ \dot{\boldsymbol{b}} = \dot{\boldsymbol{\mathcal{B}}} b^{\mathcal{B}} + \boldsymbol{ \mathcal{B}} \dot{b}^{\mathcal{B}} = \dot{\boldsymbol{\mathcal{B}}} b^{\mathcal{B}} = \boldsymbol{\mathcal{B}} \tilde{\omega }^{\mathcal{B}}b^{\mathcal{B}}. $$
(9)

It is useful to compute \(\boldsymbol{b} \times \dot{\boldsymbol{b}}\) as

$$\begin{aligned} \boldsymbol{b} \times \dot{\boldsymbol{b}} &= \bigl(\boldsymbol{\mathcal{B}} b^{ \mathcal{B}} \bigr) \times \bigl(\dot{\boldsymbol{\mathcal{B}}} b^{\mathcal{B}}\bigr) = \bigl( \boldsymbol{\mathcal{B}} b^{\mathcal{B}}\bigr) \times \bigl( \boldsymbol{ \mathcal{B}} \tilde{\omega }^{\mathcal{B}} b^{\mathcal{B}}\bigr) \end{aligned}$$
(10)
$$\begin{aligned} &= \boldsymbol{\mathcal{B}} \tilde{b}^{\mathcal{B}} \tilde{\omega } ^{\mathcal{B}} b^{\mathcal{B}} = -\boldsymbol{\mathcal{B}} \tilde{b} ^{\mathcal{B}} \tilde{b}^{\mathcal{B}} \omega ^{\mathcal{B}} = - \boldsymbol{ \mathcal{B}} \bigl(\tilde{b}^{\mathcal{B}}\bigr)^{2} \omega ^{\mathcal{B}}. \end{aligned}$$
(11)

Now, using the identity

$$ \bigl(\tilde{b}^{\mathcal{B}}\bigr)^{2} = -\bigl(b^{\mathcal{B}^{\mathsf{T}}} b^{ \mathcal{B}} I - b^{\mathcal{B}} b^{\mathcal{B}^{\mathsf{T}}}\bigr), $$
(12)

Eq. (11) becomes

$$ \boldsymbol{b} \times \dot{\boldsymbol{b}} = \boldsymbol{\mathcal{B}} \bigl(\bigl\| b^{ \mathcal{B}} \bigr\| ^{2} I - b^{\mathcal{B}} b^{\mathcal{B}^{\mathsf{T}}}\bigr) \omega ^{\mathcal{B}}. $$
(13)

For our case, b B = [ 0 0 l ] T . Therefore

$$\begin{aligned} \boldsymbol{b}\times \dot{\boldsymbol{b}} &= \boldsymbol{\mathcal{B}} \left (l^{2} I - \begin{bmatrix} 0 & 0 & 0 \\ 0 & 0 & 0 \\ 0 & 0 & l^{2} \end{bmatrix} \right ) \omega ^{\mathcal{B}} \end{aligned}$$
(14)
$$\begin{aligned} &= \boldsymbol{\mathcal{B}} \begin{bmatrix} I_{2} & 0 \\ 0 & 0 \end{bmatrix} l^{2} \omega ^{\mathcal{B}} = \boldsymbol{\mathcal{B}} l^{2} \begin{bmatrix} \omega _{1}^{\mathcal{B}} \\ \omega _{2}^{\mathcal{B}} \\ 0 \end{bmatrix} = l^{2} \boldsymbol{\omega }_{b}. \end{aligned}$$
(15)

Hence, the relationship between \(\boldsymbol{\omega }_{b}\), the angular velocity of bar \(\boldsymbol{b}\), and vectors \(\boldsymbol{b}\) and \(\dot{\boldsymbol{b}}\) (shown also in [29]) is

$$ \boldsymbol{\omega }_{b} = \frac{\boldsymbol{b}\times \dot{\boldsymbol{b}}}{\| \boldsymbol{b} \|^{2}}. $$
(16)

Using Eq. (16), the angular momentum of bar \(\boldsymbol{b}\) about its mass center is:

$$\begin{aligned} \boldsymbol{h}_{b} &= I_{b} \boldsymbol{\omega }_{b} \end{aligned}$$
(17)
$$\begin{aligned} &= \biggl(\frac{m_{b} l^{2}}{12}+\frac{m_{b} r_{b}^{2}}{4} \biggr) \biggl( \frac{\boldsymbol{b}\times \dot{\boldsymbol{b}}}{l^{2}} \biggr), \end{aligned}$$
(18)
$$\begin{aligned} \boldsymbol{h} = \boldsymbol{h}_{b} &= \biggl(\frac{m_{b}}{12}+\frac{m_{b} r_{b}^{2}}{4l ^{2}} \biggr)\boldsymbol{b} \times \dot{\boldsymbol{b}} = J\boldsymbol{b} \times \dot{\boldsymbol{b}} , \end{aligned}$$
(19)

where \(r_{b}\) is the radius of the bar and \(J = \frac{m_{b}}{12}+\frac{m _{b}r_{b}^{2}}{4l^{2}}\). The derivative with respect to time of the angular momentum of a bar member can then be formulated in terms of \(\boldsymbol{b}\) and \(\dot{\boldsymbol{b}}\) as follows:

$$\begin{aligned} \dot{\boldsymbol{h}} &= J\dot{\boldsymbol{b}} \times \dot{\boldsymbol{b}} + J \boldsymbol{b} \times \ddot{\boldsymbol{b}} \end{aligned}$$
(20)
$$\begin{aligned} &= J \boldsymbol{b} \times \ddot{\boldsymbol{b}}. \end{aligned}$$
(21)

The time rate of change of the angular momentum vector \(\boldsymbol{h}\) is equal to the sum of torques \(\boldsymbol{\tau }\) acting on the bar member about its center of mass. The forces acting on the two opposite ends of the bar member are \(\boldsymbol{f}_{1}\) and \(\boldsymbol{f}_{2}\) as illustrated in Fig. 1. The resulting torques are described here in terms of \(\boldsymbol{b}\) as

$$\begin{aligned} \dot{\boldsymbol{h}} &= \boldsymbol{\tau } \end{aligned}$$
(22)
$$\begin{aligned} &= \frac{1}{2}\boldsymbol{b} \times (\boldsymbol{f}_{2} - \boldsymbol{f}_{1}). \end{aligned}$$
(23)
Fig. 1
figure 1

Tensegrity bar member vector nomenclature

Fig. 2
figure 2

Tensegrity bar member numbering convention

Equations (21) and (23) yield

$$ J \boldsymbol{b} \times \ddot{\boldsymbol{b}} = \frac{1}{2} \boldsymbol{b} \times ( \boldsymbol{f}_{2} - \boldsymbol{f}_{1}). $$
(24)

Equation (24) can be written in any coordinates, but we choose inertial coordinates for simpler forms of final equations. This development to represent the rotational dynamics of truss elements is well known and can be checked in any standard dynamics book [33, 34]. To simplify notation hereafter we define \(b=b^{\mathcal{E}}\) where \(\boldsymbol{b} = \boldsymbol{\mathcal{B}}b^{\mathcal{B}} = \boldsymbol{\mathcal{E}}b ^{\mathcal{E}}\). Writing Eq. (24) in inertial coordinates yields

$$ J \tilde{b} \ddot{b} = \frac{1}{2} \tilde{b} (f_{2} - f_{1}). $$
(25)

An additional constraint must be added here to ensure that the bar vector \(b\) remains constant with length \(l\). This constraint is described as follows:

$$\begin{aligned} b^{\mathsf{T}}b &= l^{2}. \end{aligned}$$
(26)

Differentiating the constant length constraint of Eq. (26), a length constraint in terms of \(\ddot{b}\) is obtained:

$$\begin{aligned} \dot{b}^{\mathsf{T}}b + b^{\mathsf{T}}\dot{b} &= 0 = 2 b^{\mathsf{T}} \dot{b}, \end{aligned}$$
(27)
$$\begin{aligned} \dot{b}^{\mathsf{T}}\dot{b} + b^{\mathsf{T}}\ddot{b} &= 0, \end{aligned}$$
(28)
$$\begin{aligned} b^{\mathsf{T}}\ddot{b} &= -\dot{b}^{\mathsf{T}}\dot{b}. \end{aligned}$$
(29)

The length constraint (Eq. (29)) and rotational dynamics (Eq. (25)), both in terms of \(\ddot{b}\) can be re-expressed in matrix form as

$$ \begin{bmatrix} \tilde{b} \\ b^{\mathsf{T}} \end{bmatrix} \ddot{b} = \begin{bmatrix} \frac{1}{2 J}\tilde{b} (f_{2} - f_{1}) \\ -\dot{b}^{\mathsf{T}}\dot{b} \end{bmatrix} . $$
(30)

This is a simple linear algebra equality that can be solved for \(\ddot{b}\). One can easily verify the existence condition for the solution and the full column rank of the matrix multiplying \(\ddot{b}\). Therefore, denoting a matrix pseudoinverse by the superscript “+”, the unique solution for \(\ddot{b}\) is

$$\begin{aligned} \ddot{b} &= \begin{bmatrix} \tilde{b} \\ b^{\mathsf{T}} \end{bmatrix} ^{+} \begin{bmatrix} \frac{1}{2 J}\tilde{b} (f_{2} - f_{1})\\ -\dot{b}^{\mathsf{T}}\dot{b} \end{bmatrix} , \end{aligned}$$
(31)
$$\begin{aligned} &= \frac{1}{l^{2}} \begin{bmatrix} -\tilde{b} & b \end{bmatrix} \begin{bmatrix} \frac{1}{2 J}\tilde{b} (f_{2} - f_{1})\\ -\dot{b}^{\mathsf{T}}\dot{b} \end{bmatrix} , \end{aligned}$$
(32)
$$\begin{aligned} &= \frac{1}{l^{2}}\biggl[-\frac{1}{2 J}\tilde{b} \tilde{b} (f_{2} - f_{1}) - b \dot{b}^{\mathsf{T}}\dot{b}\biggr], \end{aligned}$$
(33)
$$\begin{aligned} & = -\frac{1}{2 J l^{2}} \bigl(-l^{2} I + bb^{\mathsf{T}}\bigr) (f_{2} - f_{1}) - \frac{1}{l^{2}}b\dot{b}^{\mathsf{T}} \dot{b}. \end{aligned}$$
(34)

We have \(\tilde{b} \tilde{b} = -l^{2} I + bb^{\mathsf{T}}\). Rearranging Eq. (34) gives the final form of the vector equations for rotational dynamics:

$$\begin{aligned} J \ddot{b} &= \frac{1}{2}(f_{2} - f_{1}) - \frac{1}{2l^{2}}bb^{ \mathsf{T}}(f_{2} - f_{1}) - \frac{J}{l^{2}}b\dot{b}^{\mathsf{T}} \dot{b}. \end{aligned}$$
(35)

The final equation represents the bar rotational dynamics including influences from the length constraint. Now we must address the translational dynamics.

3.2 Translational dynamics

For a single bar in a tensegrity structure such as that illustrated in the free-body diagram of Fig. 1, the inertial position of the bar center of mass is described by \(\boldsymbol{r}\), the vector along the bar member is described by the vector \(\boldsymbol{b}\), and the sum of the internal forces from the strings and the external forces, acting on the two ends of the bar, is described by \(\boldsymbol{f_{1}}\) and \(\boldsymbol{f_{2}}\), where \(\boldsymbol{r}=\boldsymbol{\mathcal{E}} r^{\mathcal{E}}\), \(\boldsymbol{f}_{i}= \boldsymbol{\mathcal{E}} f_{i}^{\mathcal{E}}\). For simplification, we write \(r=r^{\mathcal{E}}\) and \(f_{i}=f_{i}^{ \mathcal{E}}\). We have

$$\begin{aligned} m_{b}\ddot{\boldsymbol{r}} &= \boldsymbol{f}_{1} + \boldsymbol{f}_{2}, \end{aligned}$$
(36)

which can be written in inertial coordinates as

$$\begin{aligned} m_{b}\ddot{r} &= f_{1} + f_{2}. \end{aligned}$$
(37)

4 Matrix formulation of tensegrity dynamics

Equations (35) and (37) can be used to describe the dynamics of any given bar member in a tensegrity structure. Describing a full tensegrity structure would consequently yield \(2\beta \) vector equations for a system containing \(\beta \) bar members. The classical approach to formulate the dynamics of a multibody system is to arrange all these vectors in a single vector form [33]. However, we will assemble these equations in a matrix form to simplify the structure of the final equations.

Connectivity matrices are now introduced to relate the matrix of nodes, \(N\), to the matrix of string vectors, \(S\), and the matrix of bar vectors \(B\). The \(i\)th column of matrices \(N\), \(S\), and \(B\) are, respectively the inertial components of the vectors, \(\mathbf{n}_{i}\), \(\mathbf{s} _{i}\), and \(\mathbf{b}_{i}\). We write these as \(n_{i}\), \(s_{i}\), and \(b_{i}\). Define the string connectivity matrix by \(C_{s}^{\mathsf{T}}\), and the bar connectivity matrix by \(C_{b}^{\mathsf{T}}\). Then, by inspection of the network, labeled with bar and string vectors, one can immediately write matrices (with entries of 0, 1, −1) to satisfy the definitions \(S=NC_{s}^{\mathsf{T}}\) and \(B=NC_{b}^{\mathsf{T}}\).

By convention, we choose to name the nodes at the base of bar vectors as N 1 = [ n 1 n 2 n β ] and we choose to name the terminal ends of the bar vectors as N 2 = [ n 1 + β n 2 + β n 2 β ] . Defining each bar end point as a node, a tensegrity consisting of \(n = 2\beta \) nodes leads to a \(3\times n\) node matrix, N= [ N 1 N 2 ] , in which each column is the inertial position of a node. Also, for a network of \(\beta \) bars, define the \(3\times \beta \) matrix B= [ b 1 b 2 b β ] .

The convention mentioned above yields C b = [ I β I β ] . In general, \(C_{b}\) is a \(\beta \times n\) matrix in which each row describes the node connectivity of a bar member. That is, the row of \(C_{b}\) for a bar member connecting \({n}_{i}\) to \({n}_{j}\) will consist of a “\(+1\)” at the \(j\)th column, a “−1” at the \(i\)th column, and zeros elsewhere. Now, vectors locating the mass centers of the bars is defined as (\(r_{i}\) is the \(i\)th column of matrix \(R\)):

$$\begin{aligned} R &= N_{1}+\frac{1}{2}B , \end{aligned}$$
(38)
$$\begin{aligned} &= N_{1} + \frac{1}{2}(N_{2}-N_{1}) , \end{aligned}$$
(39)
$$\begin{aligned} &= N\frac{1}{2} \begin{bmatrix} I_{\beta }\\ I_{\beta } \end{bmatrix} = NC_{r}^{\mathsf{T}}. \end{aligned}$$
(40)

For any \(n\)-dimensional column vector, we define the “hat” operator over a vector to form a diagonal matrix from the elements of the vector. Then, the dynamic equations of the \(i\)th bar \(b_{i}\) from Eq. (35) are placed in the \(i\)th column of the matrix \(\ddot{B} \hat{J}\):

$$\begin{aligned} \ddot{B}\hat{J}= & \begin{bmatrix} \ddot{b}_{1} & \ddot{b}_{2} & \cdots & \ddot{b}_{\beta } \end{bmatrix} \begin{bmatrix} J_{1} & 0 & \cdots & 0\\ 0 & J_{2} & \cdots & 0\\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & J_{\beta } \end{bmatrix} = \begin{bmatrix} J_{1}\ddot{b}_{1} & J_{2}\ddot{b}_{2} & \cdots & J_{\beta }\ddot{b} _{\beta } \end{bmatrix} . \end{aligned}$$
(41)

This process can be performed for the remaining three terms in Eq. (35), as summarized below. Forces acting on the endpoints of each bar are described with the force matrix \(F\), whose \(i\)th column is the total force vector acting on the \(i\)th node \(n_{i}\) from both internal (string and bar forces) and external sources. Hence, for the \(i\)th bar, the first and second terms give

$$\begin{aligned} \frac{1}{2}(f_{2_{i}} - f_{1_{i}}) =& \frac{1}{2} \bigl[F C_{b}^{\mathsf{T}}\bigr]_{i}, \end{aligned}$$
(42)
$$\begin{aligned} -\frac{1}{2l^{2}}b_{i}b_{i}^{\mathsf{T}}(f_{2_{i}} - f_{1_{i}}) =& - \frac{1}{2} \bigl[B \hat{l}^{-2} \bigl\lfloor B^{\mathsf{T}}F C_{b}^{\mathsf{T}} \bigr\rfloor \bigr]_{i}, \end{aligned}$$
(43)

where we introduce the \(\lfloor \circ \rfloor \) operator, which sets every off-diagonal element of the square matrix operand to zero. Now, the last term can be written as

$$ -\frac{J_{i}}{l_{i}^{2}}b_{i}\dot{b_{i}}^{\mathsf{T}} \dot{b_{i}}= -\bigl[B \hat{J}\hat{l}^{-2} \bigl\lfloor \dot{B}^{\mathsf{T}}\dot{B} \bigr\rfloor \bigr]_{i}. $$
(44)

Combining the four matrix expressions for the four original terms in Eq. (35) gives a full matrix expression for \(\ddot{B}\). This describes the rotational motion of every bar member in the system while including a constant length constraint.

$$ \ddot{B}\hat{J} = \frac{1}{2}F C_{b}^{\mathsf{T}}- \frac{1}{2} B \hat{l}^{-2} \bigl\lfloor B^{\mathsf{T}}F C_{b}^{\mathsf{T}}\bigr\rfloor - B \hat{J}\hat{l}^{-2}\bigl\lfloor \dot{B}^{\mathsf{T}}\dot{B}\bigr\rfloor $$
(45)

This expression can be simplified with the following definition of \(\hat{\lambda }\):

$$\begin{gathered} \hat{\lambda } = -\hat{J}\hat{l}^{-2} \bigl\lfloor \dot{B}^{\mathsf{T}} \dot{B} \bigr\rfloor - \frac{1}{2} \hat{l}^{-2}\bigl\lfloor B^{\mathsf{T}}F C _{b}^{\mathsf{T}} \bigr\rfloor , \end{gathered}$$
(46)
$$\begin{gathered} \ddot{B}\hat{J} = \frac{1}{2}F C_{b}^{\mathsf{T}}+ B \hat{ \lambda }. \end{gathered}$$
(47)

Following the same process as that of the rotational dynamics, the translational dynamics must similarly be converted into a matrix expression. In this case, \(R\) is a \(3\times \beta \) matrix in which the \(i\)th column describes the inertial position of center of mass of the \(i\)th bar member. Using Eq. (40):

$$\begin{gathered} m_{b_{i}}\ddot{r_{i}} = f_{1_{i}} + f_{2_{i}} = [ \ddot{R}\hat{m_{b}}]_{i} = 2\bigl[FC_{r}^{\mathsf{T}} \bigr]_{i}, \end{gathered}$$
(48)
$$\begin{gathered} \ddot{R}\hat{m_{b}} = 2FC_{r}^{\mathsf{T}}. \end{gathered}$$
(49)

The matrix expressions for the rotational and translational dynamics of the full tensegrity system can be re-expressed as follows:

$$ \begin{bmatrix} \ddot{B} & \ddot{R} \end{bmatrix} \begin{bmatrix} \hat{J} & 0 \\ 0 & \hat{m}_{b} \end{bmatrix} + \begin{bmatrix} B & R \end{bmatrix} \begin{bmatrix} -\hat{\lambda } & 0 \\ 0 & 0 \end{bmatrix} = F \begin{bmatrix} \frac{1}{2}C_{b}^{\mathsf{T}}& 2 C_{r}^{\mathsf{T}} \end{bmatrix} . $$
(50)

Recognizing that [ 1 2 C b T 2 C r T ] 1 = [ C b T C r T ] T [30], Eq. (50) is rewritten as follows:

$$\begin{gathered} \begin{bmatrix} \ddot{B} & \ddot{R} \end{bmatrix} \begin{bmatrix} \hat{J} & 0 \\ 0 & \hat{m}_{b} \end{bmatrix} \begin{bmatrix} C_{b} \\ C_{r} \end{bmatrix} + \begin{bmatrix} B & R \end{bmatrix} \begin{bmatrix} -\hat{\lambda } & 0 \\ 0 & 0 \end{bmatrix} \begin{bmatrix} C_{b} \\ C_{r} \end{bmatrix} = F , \end{gathered}$$
(51)
$$\begin{gathered} \begin{bmatrix} \ddot{B} & \ddot{R} \end{bmatrix} \begin{bmatrix} \hat{J} C_{b} \\ \hat{m}_{b} C_{r} \end{bmatrix} + \begin{bmatrix} B & R \end{bmatrix} \begin{bmatrix} -\hat{\lambda }C_{b} \\ 0 \end{bmatrix} = F. \end{gathered}$$
(52)

The definitions of the bar and center of mass connectivity matrices, \(B = N C_{b}^{\mathsf{T}}\), and \(R = N C_{r}^{\mathsf{T}}\), can be re-expressed in matrix form and substituted into Eq. (52):

$$\begin{gathered} \begin{bmatrix} B & R \end{bmatrix} = N \begin{bmatrix} C_{b}^{\mathsf{T}}& C_{r}^{\mathsf{T}} \end{bmatrix} , \end{gathered}$$
(53)
$$\begin{gathered} \ddot{N} \begin{bmatrix} C_{b}^{\mathsf{T}}& C_{r}^{\mathsf{T}} \end{bmatrix} \begin{bmatrix} \hat{J} C_{b} \\ \hat{m}_{b} C_{r} \end{bmatrix} + N \begin{bmatrix} C_{b}^{\mathsf{T}}& C_{r}^{\mathsf{T}} \end{bmatrix} \begin{bmatrix} -\hat{\lambda }C_{b} \\ 0 \end{bmatrix} = F. \end{gathered}$$
(54)

Expanding this gives

$$ \ddot{N}\bigl(C_{b}^{\mathsf{T}}\hat{J}C_{b} + C_{r}^{\mathsf{T}}\hat{m} _{b} C_{r}\bigr) - N \bigl(C_{b}^{\mathsf{T}}\hat{\lambda }C_{b}\bigr) = F. $$
(55)

The force matrix \(F\) has been described as containing the sum of forces acting on each node in the system. This can be subdivided into two elements: external forces and internal forces. Let \(w_{i}\) be the \(i\)th column of the matrix \(W\), where \(w_{i}\) is the external force acting on the node \(n_{i}\). Internal forces, caused by tension in the string members, require knowledge of string member connectivity. The string connectivity matrix \(C_{s}\) is defined as \(S = NC_{s}^{ \mathsf{T}}\), where \(S\) is the string member matrix. For a tensegrity system consisting of \(\alpha \) string members, \(S\) is of dimension \(3\times \alpha \), and \(C_{s}\) is of dimension \(\alpha \times n\). The internal node forces caused by string tensions \(T\) can be described with \(T C_{s}\).

In this work, string tension is described in terms of a “force density” \(\gamma \). The tension vector in a string can be found as \(\textbf{t}_{i} = \textbf{s}_{i} \gamma _{i}\) where \(\textbf{s}_{i}\) is the string vector or the \(i\)th column of matrix \(S\) (modeling of elastic string is given in Appendix A). Then, the matrix of string tensions \(T\) equals \(S \hat{\gamma }\), which equals \(N C_{s}^{\mathsf{T}}\hat{\gamma }\). Based on this, the internal forces acting on nodes caused by string tensions is \(N C_{s}^{\mathsf{T}} \hat{\gamma } C_{s}\). The full force matrix expression can then be written and substituted into Eq. (55):

$$\begin{gathered} F = W - N C_{s}^{\mathsf{T}}\hat{\gamma }C_{s} \end{gathered}$$
(56)
$$\begin{gathered} \ddot{N}\bigl(C_{b}^{\mathsf{T}}\hat{J}C_{b} + C_{r}^{\mathsf{T}}\hat{m} _{b} C_{r}\bigr) + N \bigl(C_{s}^{\mathsf{T}}\hat{\gamma } C_{s}-C_{b}^{ \mathsf{T}} \hat{\lambda }C_{b} \bigr) = W \end{gathered}$$
(57)

By defining matrices \(M\), \(K\), and \(W\), a compact matrix form for the full nonlinear translational and rotational dynamics of a full tensegrity system can be written as

$$\begin{aligned} &\ddot{N}M + N K = W , \end{aligned}$$
(58)
$$\begin{aligned} &\quad M = C_{b}^{\mathsf{T}}\hat{J}C_{b} + C_{r}^{\mathsf{T}}\hat{m}C_{r}, \end{aligned}$$
(59)
$$\begin{aligned} &\quad K = C_{s}^{\mathsf{T}}\hat{\gamma } C_{s} - C_{b}^{\mathsf{T}} \hat{\lambda }C_{b}. \end{aligned}$$
(60)

5 String-to-string point mass nodes

The model derived in Sect. 4 assumes massless strings. It is important to develop a method that includes string masses. This is achieved by dividing the string into several small strings and connecting them with point masses. The added point mass node will connect only to strings and no bars (string-to-string nodes). Using this approach, a string member is modeled by subdividing the original string into \(n\) connected string members with \(n-1\) connection point masses. The positions of the point masses along the string can be chosen based on the respective length of the connected strings which in turn can be chosen to match the extensional stiffness of the original string.

We describe the process of modeling string masses by denoting two types of nodes: bar nodes, which are the endpoints of bars, and string nodes, which are the locations of string-to-string connections that have a point mass associated with them. The full node matrix can consequently be split as N= [ N b N s ] . Here, \(N_{b}\) is a \(3\times 2\beta \) matrix in which each column is the position of a bar node \({n}_{b}\), and \(N_{s}\) is a \(3 \times \sigma \) matrix in which each column is the position of a string node \({n}_{s}\). Variables \(\beta \) and \(\sigma \) represent the number of bars and number of string nodes, respectively. Note that the bar and string nodes can be extracted from the node matrix \(N\) with the definition of two new connectivity matrices, \(C_{nb}\) and \(C_{ns}\):

$$\begin{gathered} N_{b} = N \begin{bmatrix} I_{2\beta } \\ 0 \end{bmatrix} = N C_{nb}^{\mathsf{T}} , \end{gathered}$$
(61)
$$\begin{gathered} N_{s} = N \begin{bmatrix} 0 \\ I_{\sigma } \end{bmatrix} = N C_{ns}^{\mathsf{T}}, \end{gathered}$$
(62)

where \(I_{2\beta }\) and \(I_{\sigma }\) are identity matrices of size \(2\beta \) and \(\sigma \), respectively. The matrix representing the positions of center of mass, \(R\), can similarly be broken into two components: \(R_{b}\), which describes the center of mass locations for each bar member, and \(R_{s}\), which describes the location of each string point mass:

$$\begin{aligned} R_{b} &= N_{b} C_{r}^{\mathsf{T}}= NC_{nb}^{\mathsf{T}}C_{r}^{ \mathsf{T}}, \end{aligned}$$
(63)
$$\begin{aligned} R_{s} &= N_{s} = N C_{ns}^{\mathsf{T}}. \end{aligned}$$
(64)

Similarly, the expression for the bar member matrix \(B\) can be rewritten as

$$ B = N_{b} C_{b}^{\mathsf{T}}= N C_{nb}^{\mathsf{T}}C_{b}^{\mathsf{T}}. $$
(65)

Note that the bar connectivity matrix remains unchanged from its original definition preceding Eq. (42). The original string connectivity matrix \(C_{s}\) must be redefined as new string members are being added to the model. Here, \(C_{s}\) is divided into two parts: the first, \(C_{sb}\), describing bar-to-string joints and the second, \(C_{ss}\), describing string-to-string joints:

$$ S = N C_{s}^{\mathsf{T}}= \begin{bmatrix} N_{b} & N_{s} \end{bmatrix} \begin{bmatrix} C_{sb}^{\mathsf{T}} \\ C_{ss}^{\mathsf{T}} \end{bmatrix} . $$
(66)

The force matrix \(F\) is augmented to include both the sum of forces acting on bar nodes, \(F_{b}\), as well as string nodes, \(F_{s}\):

$$ F = \begin{bmatrix} F_{b} & F_{s} \end{bmatrix} = W - N C_{s}^{\mathsf{T}} \hat{\gamma } C_{s} . $$
(67)

Now, we need to write the translational dynamics of the newly defined string nodes which are modeled as point masses. We define \(m_{si}\) as the mass of the \(i\)th string node, \(r_{si}\) as the position of that node and \(f_{si}\) as the total force acting on that node. Their translational dynamics in both vector and matrix form can simply be written as

$$\begin{gathered} m_{s_{i}} \ddot{r}_{s_{i}} = f_{s_{i}} = [ \ddot{R}_{s}\hat{m}_{s}]_{i} = F_{s_{i}} , \end{gathered}$$
(68)
$$\begin{gathered} \ddot{R}_{s}\hat{m}_{s} = F_{s}. \end{gathered}$$
(69)

The dynamics of the bar members (Eqs. (46), (47) and (49)) must be slightly modified to incorporate the subdivision of the force matrix \(F\) as F= [ F b F s ] .

$$\begin{aligned} \hat{\lambda } &= -\hat{J}\hat{l}^{-2} \bigl\lfloor \dot{B}^{\mathsf{T}} \dot{B} \bigr\rfloor - \frac{1}{2} \hat{l}^{-2}\bigl\lfloor B^{\mathsf{T}}F_{b} C _{b}^{\mathsf{T}}\bigr\rfloor , \end{aligned}$$
(70)
$$\begin{aligned} \ddot{B}\hat{J} &= \frac{1}{2}F_{b} C_{b}^{\mathsf{T}}+ B \hat{\lambda }, \end{aligned}$$
(71)
$$\begin{aligned} \ddot{R}_{b}\hat{m}_{b} &= 2 F_{b} C_{r}^{\mathsf{T}}. \end{aligned}$$
(72)

Equations (69), (71), and (72) can be written in matrix form as follows:

$$\begin{aligned} \begin{bmatrix} \ddot{B} & \ddot{R}_{b} & \ddot{R}_{s} \end{bmatrix} \begin{bmatrix} \hat{J} & 0 & 0\\ 0 & \hat{m}_{b} & 0\\ 0 & 0 & \hat{m}_{s} \end{bmatrix} + \begin{bmatrix} B & R_{b} & R_{s} \end{bmatrix} \begin{bmatrix} -\hat{\lambda } & 0 & 0\\ 0 & 0 & 0\\ 0 & 0 & 0 \end{bmatrix} = \begin{bmatrix} \frac{1}{2}F_{b} C_{b}^{\mathsf{T}}& 2F_{b} C_{r}^{\mathsf{T}}& F_{s} \end{bmatrix} . \end{aligned}$$
(73)

Because the force matrix \(F\) has been defined as F= [ F b F s ] , the force term is rewritten in terms of \(F\) as

$$\begin{aligned} \begin{bmatrix} \ddot{B} & \ddot{R}_{b} & \ddot{R}_{s} \end{bmatrix} \begin{bmatrix} \hat{J} & 0 & 0\\ 0 & \hat{m}_{b} & 0\\ 0 & 0 & \hat{m}_{s} \end{bmatrix} + \begin{bmatrix} B & R_{b} & R_{s} \end{bmatrix} \begin{bmatrix} -\hat{\lambda } & 0 & 0\\ 0 & 0 & 0\\ 0 & 0 & 0 \end{bmatrix} = F \begin{bmatrix} \frac{1}{2}C_{b}^{\mathsf{T}}& 2C_{r}^{\mathsf{T}}& 0\\ 0 & 0 & I \end{bmatrix} . \end{aligned}$$
(74)

Using [ 1 2 C b T 2 C r T ] 1 = [ C b T C r T ] T , it can also be shown that:

$$ \begin{bmatrix} \frac{1}{2}C_{b}^{\mathsf{T}}& 2C_{r}^{\mathsf{T}}& 0 \\ 0 & 0 & I \end{bmatrix} ^{-1} = \begin{bmatrix} C_{b} & 0 \\ C_{r} & 0 \\ 0 & I \end{bmatrix} . $$
(75)

The previous expression allows us to rewrite Eq. (74) as follows:

$$\begin{aligned} \begin{bmatrix} \ddot{B} & \ddot{R}_{b} & \ddot{R}_{s} \end{bmatrix} \begin{bmatrix} \hat{J} & 0 & 0\\ 0 & \hat{m}_{b} & 0\\ 0 & 0 & \hat{m}_{s} \end{bmatrix} \begin{bmatrix} C_{b} & 0\\ C_{r} & 0\\ 0 & I \end{bmatrix} + \begin{bmatrix} B & R_{b} & R_{s} \end{bmatrix} \begin{bmatrix} -\hat{\lambda } & 0 & 0\\ 0 & 0 & 0\\ 0 & 0 & 0 \end{bmatrix} \begin{bmatrix} C_{b} & 0\\ C_{r} & 0\\ 0 & I \end{bmatrix} = F. \end{aligned}$$
(76)

Having previously defined \(B\), \(R_{b}\), and \(R_{s}\) in terms of \(N\) and connectivity matrices, the following expression can be substituted into the matrix expression for the full system dynamics:

$$\begin{aligned} &\begin{bmatrix} B & R_{b} & R_{s} \end{bmatrix} = N \begin{bmatrix} C_{nb}^{\mathsf{T}}C_{b}^{\mathsf{T}}& C_{nb}^{\mathsf{T}}C_{r}^{ \mathsf{T}}& C_{ns}^{\mathsf{T}} \end{bmatrix} , \end{aligned}$$
(77)
$$\begin{aligned} &\ddot{N} \begin{bmatrix} C_{nb}^{\mathsf{T}}C_{b}^{\mathsf{T}}& C_{nb}^{\mathsf{T}}C_{r}^{ \mathsf{T}}& C_{ns}^{\mathsf{T}} \end{bmatrix} \begin{bmatrix} \hat{J} & 0 & 0\\ 0 & \hat{m}_{b} & 0\\ 0 & 0 & \hat{m}_{s} \end{bmatrix} \begin{bmatrix} C_{b} & 0\\ C_{r} & 0\\ 0 & I \end{bmatrix} \\ &\quad {}+ N \begin{bmatrix} C_{nb}^{\mathsf{T}}C_{b}^{\mathsf{T}}& C_{nb}^{\mathsf{T}}C_{r}^{ \mathsf{T}}& C_{ns}^{\mathsf{T}} \end{bmatrix} \begin{bmatrix} -\hat{\lambda } & 0 & 0\\ 0 & 0 & 0\\ 0 & 0 & 0 \end{bmatrix} \begin{bmatrix} C_{b} & 0\\ C_{r} & 0\\ 0 & I \end{bmatrix} = F. \end{aligned}$$
(78)

Multiplying this out, substituting Eq. (67) for \(F\), and rearranging yields the following expression for the full system dynamics:

$$\begin{aligned} \ddot{N} \begin{bmatrix} C_{nb}^{\mathsf{T}}C_{b}^{\mathsf{T}}\hat{J} C_{b} + C_{nb}^{ \mathsf{T}}C_{r}^{\mathsf{T}}\hat{m}_{b} C_{r} & C_{ns}^{\mathsf{T}} \hat{m}_{s} \end{bmatrix} + N \begin{bmatrix} C_{s}^{\mathsf{T}}\hat{\gamma } C_{sb} - C_{nb}^{\mathsf{T}}C_{b}^{ \mathsf{T}}\hat{\lambda } C_{b} & C_{s}^{\mathsf{T}}\hat{\gamma }C _{ss} \end{bmatrix} = W. \end{aligned}$$
(79)

Following the example set in Eq. (58), a compact matrix form for the full system dynamics including string masses can be obtained with the following definitions of \(M_{s}\) and \(K_{s}\).

$$\begin{aligned} &\ddot{N}M_{s} + NK_{s} = W, \end{aligned}$$
(80)
$$\begin{aligned} &\quad M_{s} = \begin{bmatrix} C_{nb}^{\mathsf{T}}(C_{b}^{\mathsf{T}}\hat{J} C_{b} + C_{r}^{ \mathsf{T}}\hat{m}_{b} C_{r}) & C_{ns}^{\mathsf{T}}\hat{m}_{s} \end{bmatrix} , \end{aligned}$$
(81)
$$\begin{aligned} &\quad K_{s} = \begin{bmatrix} C_{s}^{\mathsf{T}}\hat{\gamma } C_{sb} - C_{nb}^{\mathsf{T}}C_{b}^{ \mathsf{T}}\hat{\lambda } C_{b} & C_{s}^{\mathsf{T}}\hat{\gamma }C _{ss} \end{bmatrix} , \end{aligned}$$
(82)

where substituting the value of \(F_{b}\) in Eq. (70) gives \(\hat{\lambda }\) as

$$\begin{aligned} \hat{\lambda } = -\hat{J}\hat{l}^{-2} \bigl\lfloor \dot{B}^{\mathsf{T}} \dot{B} \bigr\rfloor - \frac{1}{2} \hat{l}^{-2}\bigl\lfloor B^{\mathsf{T}}(W-S \hat{\gamma }C_{s})C_{nb}^{\mathsf{T}}C_{b}^{\mathsf{T}} \bigr\rfloor . \end{aligned}$$
(83)

6 Class-\(k\) tensegrity systems

A simple modification of the derived dynamics allows for handling of Class-\(k\) tensegrity structures (\(k\) bars connected to a node through a ball joint). Here, “Class” denotes the maximum number of bar members present at a given node in the definition of the structure topology. If there are no bar-to-bar joints, the structure is said to be of Class 1. If there is at least one node in which two bars are connected, it is said to be of Class 2, and so on.

In this model, Class-\(k\) structures (where \(k > 1\)) are handled by converting each Class-\(k\) joint into \(k\) Class-1 nodes constrained to coincide at all times with a constraint matrix and Lagrange multipliers.

The linear constraint equation is written as

$$ NP = D, $$
(84)

where \(P\) is a \(n \times c\) and \(D\) is a \(3 \times c\) matrix specified such that constrained nodes are set equal to one another where \(c\) is the number of constraints required. For example, if nodes 1 and 2 must coincide at all times, a column of \(P\) and \(D\) would be specified such that \(NP = D\) gives \(n_{1} - n_{2} = 0\). Adding this linear constraint will introduce some constraint forces written as \(\varOmega P^{ \mathsf{T}}\) and will lead to the new dynamics:

$$ \ddot{N}M_{s} + NK_{s} = W+\varOmega P^{\mathsf{T}} $$
(85)

where

$$\begin{aligned} K_{s} &= \begin{bmatrix} C_{s}^{\mathsf{T}}\hat{\gamma } C_{sb} - C_{nb}^{\mathsf{T}}C_{b}^{ \mathsf{T}}\hat{\lambda } C_{b} & C_{s}^{\mathsf{T}}\hat{\gamma }C _{ss} \end{bmatrix} , \end{aligned}$$
(86)
$$\begin{aligned} \hat{\lambda } &= -\hat{J}\hat{l}^{-2} \bigl\lfloor \dot{B}^{\mathsf{T}} \dot{B} \bigr\rfloor - \frac{1}{2} \hat{l}^{-2}\bigl\lfloor B^{\mathsf{T}}\bigl(W+ \varOmega P^{\mathsf{T}}-S\hat{\gamma }C_{s}\bigr)C_{nb}^{\mathsf{T}}C_{b} ^{\mathsf{T}}\bigr\rfloor , \end{aligned}$$
(87)

and \(\varOmega \) is the \(3 \times c\) matrix of Lagrange multipliers satisfying the dynamics and constraints at all time-steps. The Lagrange multipliers required to maintain these constraints can be thought of as contact forces at the Class-\(k\) nodes [30].

6.1 Reduced-order dynamics

Adding the linear constraints into the dynamics will restrict the motion in certain dimensions, thus reducing the order of the dynamics to a span a smaller space. The dynamics equation (85) can be reduced into a smaller dimensional equation by augmenting it with the constraint equation (84). To this end, we use the singular value decomposition (SVD) of the matrix \(P\) as

$$\begin{aligned} P=U\varSigma V^{\mathsf{T}}= \begin{bmatrix} U_{1} & U_{2} \end{bmatrix} \begin{bmatrix} \varSigma _{1} \\ 0 \end{bmatrix} \begin{bmatrix} V^{\mathsf{T}} \end{bmatrix} \end{aligned}$$
(88)

where \(U\in \mathbb{R}^{n\times n}\) and \(V\in \mathbb{R}^{c\times c}\) are both unitary matrices, \(U_{1}\in \mathbb{R}^{n\times c}\) and \(U_{2}\in \mathbb{R}^{n\times (n-c)}\) are submatrices of \(U\), and \(\varSigma _{1}\in \mathbb{R}^{c\times c}\) is a diagonal matrix of positive singular values. By defining

$$\begin{aligned} \eta =[\eta _{1} \;\; \eta _{2}] \triangleq NU=[NU_{1} \;\; NU_{2}], \end{aligned}$$
(89)

the constraint equation (84) can be modified as

$$\begin{aligned} NP=NU\varSigma V^{\mathsf{T}}=[\eta _{1} \;\; \eta _{2}] \begin{bmatrix} \varSigma _{1} \\ 0 \end{bmatrix} \begin{bmatrix} V^{\mathsf{T}} \end{bmatrix} =D, \end{aligned}$$
(90)

which implies

$$\begin{aligned} \eta _{1}=DV\varSigma _{1}^{-1}, \qquad \dot{\eta }_{1}=0, \qquad \ddot{\eta }_{1}=0. \end{aligned}$$
(91)

Here, \(\eta _{1}\) represents the no-motion space in transformed coordinates. Moreover, \(\eta _{2}\) will evolve according to the constrained dynamics in new coordinate system. Using Eqs. (88)–(91), the dynamics equation (85) can be rewritten as

$$\begin{aligned} \ddot{N}UU^{\mathsf{T}}M_{s}+NUU^{\mathsf{T}}K_{s} &=W+ \varOmega V \varSigma ^{\mathsf{T}}U^{\mathsf{T}} \end{aligned}$$
(92)
$$\begin{aligned} \Rightarrow \ddot{\eta }_{2}U_{2}^{\mathsf{T}}M_{s}+ \eta _{1}U_{1} ^{\mathsf{T}}{K_{s}}+\eta _{2}U_{2}^{\mathsf{T}}{K_{s}} &=W+\varOmega V \varSigma _{1}^{\mathsf{T}}U_{1}^{\mathsf{T}}. \end{aligned}$$
(93)

Post-multiplying the above equation by a non-singular matrix [ U 2 M s 1 U 1 ] will yield two parts, where first part gives the second order differential equation for the reduced dynamics:

$$\begin{aligned} \ddot{\eta }_{2}U_{2}^{\mathsf{T}}M_{s}U_{2}+ \eta _{2}U_{2}^{ \mathsf{T}}{K_{s}}U_{2} &=WU_{2}-\eta _{1}U_{1}^{\mathsf{T}}{K_{s}}U _{2} \end{aligned}$$
(94)
$$\begin{aligned} \Rightarrow \ddot{\eta }_{2}M_{2}+\eta _{2}K_{2} &=\widetilde{W}, \end{aligned}$$
(95)

with \(M_{2} = U_{2}^{\mathsf{T}}{M_{s}}U_{2}\) and \(K_{2} = U_{2}^{\mathsf{T}}{K_{s}}U_{2}\), and the second part gives an algebraic equation that is used to solve for the Lagrange multiplier:

$$\begin{aligned} \ddot{\eta }_{2}U_{2}^{\mathsf{T}}M_{s}M_{s}^{-1}U_{1}+ \eta _{1}U_{1} ^{\mathsf{T}}{K_{s}}M_{s}^{-1}U_{1}+ \eta _{2}U_{2}^{\mathsf{T}}{K_{s}}M _{s}^{-1}U_{1} &=WM_{s}^{-1}U_{1}+ \varOmega V\varSigma _{1}^{\mathsf{T}}U_{1} ^{\mathsf{T}}M_{s}^{-1}U_{1} \end{aligned}$$
(96)
$$\begin{aligned} \Rightarrow N{K_{s}}M_{s}^{-1}U_{1}- \varOmega P^{\mathsf{T}}M_{s}^{-1}U _{1} &=WM_{s}^{-1}U_{1}. \end{aligned}$$
(97)

Notice that \(K_{s}\) is also a function of \(\varOmega \) from Eqs. (86)–(87), making it a linear algebra problem. The analytical expression to solve the Lagrange multiplier (\(\varOmega \)) is given in Appendix B.

7 Examples of the implemented model

All the dynamic simulations are performed using a Matlab-based software developed using this formulation. The numerical integration package used in this software is of fourth-order Runge–Kutta type. Bar length correction was used only for class-\(k\) structure simulation. There was no significant violation (around machine precision \(10^{-16}\)) in bar length constraint during simulations of other examples. Therefore, the bar length correction algorithm was not used for those examples. It is also advisable to use the bar length correction algorithm only if necessary (Appendix C).

7.1 Example 1: influence of string subdivision on tensegrity prism dynamics

First, the dynamic simulation of a Class-1 triangular tensegrity prism with massive strings is shown in Fig. 3. To demonstrate the modeling of flexible string members with mass, each string member in the prism is subdivided into 5 members by inserting 4 string-to-string nodes (point masses) along the original string member. Initial conditions are specified to simulate the dynamics. In the absence of external forces, tensegrity prism has a known equilibrium solution of \(\gamma _{v} = \sqrt{3} \gamma _{t} = \sqrt{3} \gamma _{b}\), where \(\gamma _{v}\), \(\gamma _{t}\) and \(\gamma _{b}\) represent the force density in vertical, top and bottom string, respectively [2].

Fig. 3
figure 3

Simulation time-lapse of prism structure using string-to-string connections to model string mass. (Bars are shown in blue and strings are shown in red) (Color figure online)

For demonstration purposes, bar masses are specified as \(m_{b} = 1~\mbox{kg}\), and point masses are specified as \(m_{s} = 0.01~\mbox{kg}\). Bar lengths, based on specified initial node positions, are \(l_{b} = 1.4142~\mbox{m}\) long and all string members are given stiffness values of \(k = 100~\mbox{N/m}\). Initial force density values are deliberately specified as \(\gamma _{t} = \gamma _{b} = \gamma _{v} = 30~\mbox{N/m}\) to induce motion.

Second, we demonstrate that when modeling the string mass, the systems dynamics converge as the number of segments used in modeling the string members increases. In this case, the string members of the prism structure are modeled with 1 to 10 string segments. Figure 4 shows the prism structure string segments modeled with 1, 5, and 10 “child” string segments.

Fig. 4
figure 4

Prism structure string members modeled with varying number of string segments (Color figure online)

The case in which each string member is modeled with a single string segment represents the case in which string mass is neglected. For the remaining cases, the stiffness values of the original 9 “parent” string members are converted into equivalent stiffness values for their “children” string segments. Similarly, a specified parent string mass is specified and distributed across the generated child point mass nodes. The same initial condition is applied to each case to allow direct comparison of the resulting dynamical response. Figure 5 shows the node 1 y-coordinate time histories for a number of these simulation cases. It is evident here that, as the number of string segments used increases, the dynamical response converges.

Fig. 5
figure 5

Node coordinate dynamical response convergence (Color figure online)

To get better insight, one can compare all cases with the final simulation case, which uses 10 string segments as per the original string member. Computing the spatial distance between node 1 in each case vs. node 1 in the final case at each time step gives a time history representing the discrepancy between the given and final cases. The square sum of this spatial discrepancy over the simulation time-span i.e. the \(\mathcal{L}_{2}\) norm of the spatial distance between the node 1 position with respect to the node 1 position in the final case, can then be used to quantify the total error between the given and final cases. The difference in the dynamic response decreases rapidly as the number of string segments is increased. For this example, the error was found to be less than 0.5% for the last 9th to 10th division.

7.2 Example 2: dynamics of a D-bar structure with one node inertially fixed

This example will demonstrate the dynamics of a Class-\(k\) structure. The structure we simulate here is a D-bar structure. A complexity-1 D-bar structure consists of 4 compressive members connected in a diamond shape with 2 tensile members along the diagonal [2]. As the maximum number of bars connected at any node is 2, it is a “Class 2” structure.

Here, we simulate the dynamics of the structure with one node (shown in black) fixed to the ground i.e. inertial position of the node remains constant. For demonstration purposes, each bar is \(l_{b} = 1~\mbox{m}\) long and has a mass of \(m_{b} = 1~\mbox{kg}\). Both string members are given a stiffness value of \(k = 100~\mbox{N/m}\) and different prestress (force density) to induce motion. Figure 6 shows three time-lapse images of the simulation. Simulation results show that both, fixed position constraint and pin joint constraints (bar to bar connection) are satisfied all the time (up to machine precision) as shown in Fig. 7b. Figure 7a shows that the length of all the bars also remains constant throughout the simulation verifying the efficacy of the results.

Fig. 6
figure 6

Simulation time-lapse of a D-bar structure

Fig. 7
figure 7

Results for constraint D-bar structure

7.3 Example 3: dynamics of a flexible membrane having only tensile members

In this example, we demonstrate the dynamics of a “Class 0” structure consisting solely of string members—a cylindrical string mesh membrane. The configuration of the strings in this membrane has been chosen to be derived from a double helix tensegrity (DHT) structure with all the bars removed. Figure 8a shows the typical structure of this configuration. We define the complexity of the structure by \(p\) and \(q\) where \(p\) is defined as the number of nodes on the circular ring and \(q\) is the number of circular rings in longitudinal direction [35]. It can be better approximated to a continuous membrane by increasing the complexity of the structure as shown in Fig. 8b.

Fig. 8
figure 8

DHT structure without bars (\(R = 20~\mbox{m}\) and \(L = 40~\mbox{m}\)). (End caps are not shown but included in the maths)

To demonstrate the dynamics of this membrane, we start from the equilibrium position of the structure with 1 atm pressure difference from inside to the outside of the cylinder. The stiffness in the string was calculated such that the length ratio (unstretched string length to current string length) is 0.975 at the equilibrium position. The mass of individual string has been used from the minimum mass calculation, required to take 1 atmospheric pressure. The material properties used for this simulation are of UHMWPE (spectra). Damping is also added in the strings to get the \(\eta \) (damping coefficient) value of 0.1. Appendix A shows the formulation to add damping in the strings. Figures 9a and 9b show the radial motion of the center nodes (shown as blue dots) of two membranes (low and high complexity) in the presence of 5% instantaneous change in pressure. Notice the attenuation in the vibration response along the radial direction, depicting the effect of damping included in the dynamics. No motion in the vertical direction was observed as the membrane will elongate equally in the upward and downward direction with respect to the center node.

Fig. 9
figure 9

Time history of motion of the center nodes (shown as blue dots) (\(R = 20~\mbox{m}\) and \(L = 40~\mbox{m}\)) (Color figure online)

7.4 Example 4: dynamic simulation of a six bars tensegrity ball as planetary lander

The example demonstrates the capability of the formulation to perform the dynamic simulation with inputs from the external environment. A dynamic simulation result was shown when a tensegrity lander [8] with 6 bars and 24 strings was dropped from a height of 3.5 m. For this simulation, the ground was modeled as a spring–damper system of stiffness \(k_{g} = 10^{4}~\mbox{N/m}\) and damping \(c_{g} = 10~\mbox{N-s/m}\). An initial prestress value of \(\gamma = 1000~\mbox{N/m}\) was used for all the strings which result in self-equilibrium for the structure. The mass of each bar was assumed to be \(m_{b} = 1~\mbox{kg}\) and string mass was assumed to be \(m_{s} = 0.1~\mbox{kg}\). The stiffness value of each string was assumed to be \(k = 5000~\mbox{N/m}\) with a damping coefficient value \(c = 10~\mbox{N-s/m}\).

Figure 10 shows the time-lapse images of the lander as it hits the ground. Figure 11a shows the vertical distance of the center of mass of the lander from the ground. Notice that, as we model both ground and strings with some damping, the vertical distance keeps decreasing. Figure 11b shows the error in the bar length of one of the bars during the simulation.

Fig. 10
figure 10

Simulation time-lapse of a tensegrity lander

Fig. 11
figure 11

Results for tensegrity lander

8 Conclusions

This paper develops the nonlinear dynamic models of any multibody system composed of a network of bars in compression and cables in tension. This is accomplished by having any connection between bars or strings that behave mathematically as frictionless ball joints. The capability to have string-to-string connections allow the approximations of membranes or nets. Such surfaces allow a mathematical treatment to integrate advantages of tensegrity and origami structures. The capability to have bar-to-bar connections removes previous criticism of tensegrity as “only soft structures”. The approach to Class-\(k\) tensegrity (bar-to-bar connections) is to add Lagrange multipliers to accommodate the constraint forces due to bar-to-bar connections, and then reduce the dynamic model by using the constraint equation. The Lagrange multipliers appear linearly and are computed from a linear algebra problem. Writing the dynamics in non-minimal coordinates avoids the use of transcendental functions, providing a very simple second order matrix differential equation. The nonlinear dynamics is linear in control variables (force densities in the strings), which allows control laws to be written independently of the material properties of the strings. A bar length correction algorithm is also provided to satisfy the bar length constraints at both zero and first-order derivative. The algorithm should be used only if necessary.