# From a linear force actuator that spans multiple links and joints to the equivalent motor torque

I am programming/using a rigid body joint-space dynamics solver for robots in which I want to implement linear force actuators between links with their equivalent torque sources that are 'spanned' by this linear actuator.

Consider the example figure sketch below: It shows a three bar linkage floating in 3D space. We have a coordinate system $\Psi_0$ in which we can express all vectors. The left and right figure are the same, except for the fact that the linear force actuator in the left figure has been replaced by rotation actuator torques (see following text). Because they are supposed to be equivalent I have added that large 'equals' sign between the two figures.

There is a linear force actuator between points $\mathbf{p}_1$ and $\mathbf{p}_2$ that effectively pulls these points towards each other. This actuator delivers a force with size $F$, which is drawn along the dashed red line as $\mathbf{F}_1$ in point $\mathbf{p}_1$ and as $\mathbf{F}_2$ in point $\mathbf{p}_2$, in opposite direction, due to Newton's third law.

The three bar linkage has two passive single-DOF joints whose locations in 3D-space are given by $\mathbf{j}_1$ and $\mathbf{j}_2$. These joints rotate around their axis of rotation $\hat{\mathbf{u}}_1$ and $\hat{\mathbf{u}}_2$, given with unit length. The joint angles $q_1$ and $q_2$ show the angle in the respective joint.

Problem: I want to know the equivalent torque vectors $\mathbf{T}_1$ and $\mathbf{T}_2$ that would result from the linear force actuator $\mathbf{F}$. These torque vectors would give me the exact same dynamical behavior (I am not interested in joint constraint forces).

I know that the locations of $\mathbf{p}_1$, $\mathbf{p}_2$, $\mathbf{j}_1$, $\mathbf{j}_2$ are known, that vectors $\hat{\mathbf{u}}_1$ and $\hat{\mathbf{u}}_2$ are known, $\mathbf{F}_1=-\mathbf{F}_2$ is known, and that $q_1$ and $q_2$ are known. All vectors are numerically expressed in frame $\Psi_0$.

Attempt: Simpler case: If the middle link between $\mathbf{j}_1$ and $\mathbf{j}_2$ would be missing, then we have only a single revolute joint $\mathbf{j}_1$. Then I would calculate the equivalent torque vector to be: \begin{align} \mathbf{T}_1 &= \left(\left((\mathbf{p}_1-\mathbf{j}_1)\times\mathbf{F}_1\right)\cdot\hat{\mathbf{u}}_1\right)\hat{\mathbf{u}}_1 \\ &= \left(\left((\mathbf{p}_2-\mathbf{j}_2)\times-\mathbf{F}_2\right)\cdot\hat{\mathbf{u}}_1\right)\hat{\mathbf{u}}_1 \end{align} Where $a\times b$ is the 3D cross-product, and $a\cdot b$ is the dot-product. The torque applied by the actuator is simply the length of the torque vector.

General case: I now get pretty confused when the linear actuator spans one or more extra links and joints between the attachment points (imagine $n$ joints with arbitrary rotation direction, and $n-1$ links between the two final links that have $\mathbf{p}_1$ and $\mathbf{p}_2$ attached). I looked into what's explained here, but I need a method that works directly with numerical values for the vector elements for all vectors that I know.

Edit: am I just confusing myself and is it nothing more than Jacobian transpose (the Jacobian from joint-space to e.g. $\mathbf{p}_2$)? I'd rather not construct Jacobians for all attachment points.