Kinematics & Statics of the DexWrist Mechanism

Full derivation accompanying Sec. III-B

The DexWrist is a decoupled 2-(R, RR) spherical parallel mechanism of the Agile-Eye family. Both actuators sit in the forearm and drive the output flange about a single fixed point (the wrist center), so the mechanism produces pure rotation. From the home geometry we derive the closed-form forward and inverse kinematics, the differential kinematics, and the virtual-work statics. The kinematics is verified against the CAD model, and the statics on the bench.

Notation follows the paper. The two actuated joint angles are \(\theta_1\) (yaw leg) and \(\theta_2\) (pitch leg); the two output angles are \(q_1\) (yaw, R/U) and \(q_2\) (pitch, F/E). We write joint and output axes as unit vectors \(\mathbf{e}_1,\dots,\mathbf{e}_5\) and \(\mathbf{v}\), expressed in a fixed base frame.

1. Mechanism and axis definitions

The mechanism is a single-loop spherical 5R chain whose five revolute axes \(\mathbf{e}_1,\mathbf{e}_3,\mathbf{e}_5,\mathbf{e}_4,\mathbf{e}_2\) all pass through the wrist center. With five one-DOF joints and the three constraints of a spherical closed loop, the mobility is \(5-3=2\). Two of the joints are actuated; the other three are passive.

We choose the base frame to coincide with the mechanism at home: \(\hat{\mathbf{x}}\parallel\mathbf{e}_1\) (yaw motor axis), \(\hat{\mathbf{z}}\parallel\mathbf{e}_2\) (pitch motor axis), and \(\hat{\mathbf{y}}\parallel\mathbf{v}_0\) (home output direction).

2. Home unit vectors and link twists

The rotation matrices about the base axes are \[ R_x(\phi)=\begin{bmatrix}1&0&0\\0&\cos\phi&-\sin\phi\\0&\sin\phi&\cos\phi\end{bmatrix}, \qquad R_z(\phi)=\begin{bmatrix}\cos\phi&-\sin\phi&0\\ \sin\phi&\cos\phi&0\\0&0&1\end{bmatrix}. \] In the base frame, the axes at home \((\theta_1=\theta_2=0)\) are

AxisRoleHome unit vector
\(\mathbf{e}_1\)yaw motor axis (actuated)\((1,\,0,\,0)=\hat{\mathbf{x}}\)
\(\mathbf{e}_2\)pitch motor axis (actuated)\((0,\,0,\,1)=\hat{\mathbf{z}}\)
\(\mathbf{e}_3^{\,0}\)yaw driven axis (passive)\((0,\,0,\,1)=\hat{\mathbf{z}}\)
\(\mathbf{e}_4^{\,0}\)pitch driven axis (passive)\((0,\,\cos\alpha,\,-\sin\alpha)\)
\(\mathbf{e}_5^{\,0}\)output reference axis (passive)\((1,\,0,\,0)=\hat{\mathbf{x}}\)
\(\mathbf{v}_0\)output flange axis\((0,\,1,\,0)=\hat{\mathbf{y}}\)

Each pair of consecutive axes subtends a fixed link twist. All twists are right angles except one:

TwistBetweenValue
\(\alpha_0\)\(\angle(\mathbf{e}_1,\mathbf{e}_2)\)\(90^\circ\)
\(\alpha_1\)\(\angle(\mathbf{e}_1,\mathbf{e}_3)\)\(90^\circ\)
\(\alpha_2\)\(\angle(\mathbf{e}_2,\mathbf{e}_4)\)\(95^\circ\)
\(\alpha_3\)\(\angle(\mathbf{e}_3,\mathbf{e}_5)\)\(90^\circ\)
\(\alpha_4\)\(\angle(\mathbf{e}_4,\mathbf{e}_5)\)\(90^\circ\)

The lone non-orthogonal twist is \(\alpha_2=95^\circ\). We define the offset \[ \alpha \triangleq \alpha_2-90^\circ = 5^\circ, \] which appears through \(\cos\alpha\) and \(\sin\alpha\) below; it provides clearance for the yaw axis to reach the full \(\pm 40^\circ\) range. The home geometry satisfies the two orthogonality conditions directly: \(\mathbf{e}_3^{\,0}\!\cdot\!\mathbf{v}_0=\hat{\mathbf{z}}\!\cdot\!\hat{\mathbf{y}}=0\) and \(\mathbf{e}_4^{\,0}\!\cdot\!\mathbf{e}_5^{\,0}=(0,\cos\alpha,-\sin\alpha)\!\cdot\!(1,0,0)=0\).

3. Actuated axes and loop-closure constraints

Each actuator rotates its driven axis about its own motor axis: \[ \mathbf{e}_3 = R_x(\theta_1)\,\mathbf{e}_3^{\,0} = R_x(\theta_1)\,\hat{\mathbf{z}} = (0,\ -\sin\theta_1,\ \cos\theta_1), \] \[ \mathbf{e}_4 = R_z(\theta_2)\,\mathbf{e}_4^{\,0} = R_z(\theta_2)\,(0,\cos\alpha,-\sin\alpha) = (-\cos\alpha\,\sin\theta_2,\ \cos\alpha\,\cos\theta_2,\ -\sin\alpha). \] The output link's orientation is written as \[ R_{\text{out}} = R_x(q_1)\,R_z(q_2), \] a rotation by \(q_1\) about the base \(x\)-axis followed by \(q_2\) about the (moved) body \(z\)-axis \(\mathbf{e}_3\). This choice removes the single redundant roll DOF of a general orientation and leaves the two physical output angles \((q_1,q_2)\). The three output-link axes then read

\(\mathbf{e}_3 = R_{\text{out}}\,\hat{\mathbf{z}} = (0,\ -\sin q_1,\ \cos q_1),\)

\(\mathbf{v} = R_{\text{out}}\,\hat{\mathbf{y}} = (-\sin q_2,\ \cos q_2\cos q_1,\ \cos q_2\sin q_1),\)

\(\mathbf{e}_5 = R_{\text{out}}\,\hat{\mathbf{x}} = (\cos q_2,\ \cos q_1\sin q_2,\ \sin q_1\sin q_2).\)

Closing the loop imposes exactly the two constant-angle conditions read off the twists \(\alpha_3=\alpha_4=90^\circ\):

Loop-closure constraints \[ \text{(C1, yaw)}\quad \mathbf{e}_3\cdot\mathbf{v}=0, \qquad\qquad \text{(C2, pitch)}\quad \mathbf{e}_4\cdot\mathbf{e}_5=0. \]

In C1, \(\mathbf{e}_3\) is set by motor 1 and \(\mathbf{v}\) by the output; in C2, \(\mathbf{e}_4\) is set by motor 2 and \(\mathbf{e}_5\) by the output. The two scalar equations determine the two unknowns \((q_1,q_2)\).

4. Forward kinematics \((\theta_1,\theta_2)\mapsto(q_1,q_2)\)

4.1 Yaw constraint fixes \(q_1\)

Substitute \(\mathbf{e}_3=(0,-\sin\theta_1,\cos\theta_1)\) (from motor 1) and \(\mathbf{v}=(-\sin q_2,\ \cos q_2\cos q_1,\ \cos q_2\sin q_1)\) into C1: \[ \mathbf{e}_3\cdot\mathbf{v} = -\sin\theta_1\,\cos q_2\cos q_1 + \cos\theta_1\,\cos q_2\sin q_1 = \cos q_2\,\big(\cos\theta_1\sin q_1 - \sin\theta_1\cos q_1\big) = \cos q_2\,\sin(q_1-\theta_1). \] Within the mechanism's range \(|q_2|<\tfrac{\pi}{2}\) we have \(\cos q_2\neq 0\), so \(\sin(q_1-\theta_1)=0\), giving

Yaw (exact) \[ q_1=\theta_1. \]

Yaw maps one-to-one onto its motor at every configuration.

4.2 Pitch constraint fixes \(q_2\)

Substitute \(\mathbf{e}_4=(-\cos\alpha\,\sin\theta_2,\ \cos\alpha\,\cos\theta_2,\ -\sin\alpha)\) (from motor 2) and \(\mathbf{e}_5=(\cos q_2,\ \cos q_1\sin q_2,\ \sin q_1\sin q_2)\) into C2, and use \(q_1=\theta_1\): \[ \mathbf{e}_4\cdot\mathbf{e}_5 = -\cos\alpha\,\sin\theta_2\,\cos q_2 + \big(\cos\alpha\,\cos\theta_1\cos\theta_2 - \sin\alpha\,\sin\theta_1\big)\sin q_2 = 0. \] Solving for the tangent, \[ \tan q_2 = \frac{\cos\alpha\,\sin\theta_2}{\cos\alpha\,\cos\theta_1\cos\theta_2 - \sin\alpha\,\sin\theta_1}, \] and taking the quadrant-correct branch,

Pitch (closed form) \[ q_2 = \operatorname{atan2}\!\big(\cos\alpha\,\sin\theta_2,\ \ \cos\alpha\,\cos\theta_1\cos\theta_2 - \sin\alpha\,\sin\theta_1\big). \]

Pitch is a closed-form function of both actuators. In the orthogonal limit \(\alpha\to 0\) (so \(\cos\alpha\to 1\), \(\sin\alpha\to 0\)) this collapses to the clean Agile-Eye relation \[ \tan q_2 = \frac{\tan\theta_2}{\cos q_1}. \]

4.3 Output axis

With \((q_1,q_2)\) known, the output flange axis is \[ \mathbf{v} = \big(-\sin q_2,\ \ \cos q_2\cos q_1,\ \ \cos q_2\sin q_1\big), \] which returns \(\mathbf{v}=\hat{\mathbf{y}}\) at home, as required.

5. Inverse kinematics \((q_1,q_2)\mapsto(\theta_1,\theta_2)\)

Yaw inverts trivially,

\(\theta_1 = q_1.\)

For pitch, start from the C2 relation and divide through by \(\cos q_2\) (nonzero in range), using \(\theta_1=q_1\): \[ \cos\alpha\,\sin\theta_2 = \tan q_2\,\big(\cos\alpha\,\cos q_1\cos\theta_2 - \sin\alpha\,\sin q_1\big). \] Collecting the \(\theta_2\) terms puts this in the standard linear-in-\(\{\cos\theta_2,\sin\theta_2\}\) form

Pitch inverse \[ A\cos\theta_2 + B\sin\theta_2 = C, \] \[ A=-\tan q_2\,\cos\alpha\,\cos q_1,\qquad B=\cos\alpha,\qquad C=-\tan q_2\,\sin\alpha\,\sin q_1. \]

This is solved in closed form by the standard harmonic-addition method. Writing \(R=\sqrt{A^2+B^2}\) and \(\delta=\operatorname{atan2}(B,A)\), the equation becomes \(R\cos(\theta_2-\delta)=C\), so \[ \theta_2 = \delta \pm \arccos\!\left(\frac{C}{R}\right) = \operatorname{atan2}(B,A) \pm \arccos\!\left(\frac{C}{\sqrt{A^2+B^2}}\right), \] and we take the root lying in the physical range \(|\theta_2|<\tfrac{\pi}{2}\) (equivalently \((\theta_1,\theta_2)\in\mathcal{Q}'=\{|\theta_i|<\tfrac{\pi}{2}\}\)). In the small-offset limit \(\alpha\to 0\) this reduces to the explicit form \[ \theta_2 \approx \operatorname{atan}\!\big(\cos q_1\,\tan q_2\big). \]

6. Differential kinematics and the diagonal constraint Jacobian

Differentiate the two constraints in time. The actuated axes rotate about their own motor axes, and the output axes rotate with the flange angular velocity \(\boldsymbol{\omega}\): \[ \dot{\mathbf{e}}_3=\dot\theta_1(\mathbf{e}_1\times\mathbf{e}_3),\quad \dot{\mathbf{e}}_4=\dot\theta_2(\mathbf{e}_2\times\mathbf{e}_4),\quad \dot{\mathbf{v}}=\boldsymbol{\omega}\times\mathbf{v},\quad \dot{\mathbf{e}}_5=\boldsymbol{\omega}\times\mathbf{e}_5. \]

6.1 Yaw constraint rate

Differentiating C1, \(\dot{\mathbf{e}}_3\cdot\mathbf{v} + \mathbf{e}_3\cdot\dot{\mathbf{v}}=0\): \[ \dot\theta_1\,(\mathbf{e}_1\times\mathbf{e}_3)\cdot\mathbf{v} + \mathbf{e}_3\cdot(\boldsymbol{\omega}\times\mathbf{v}) = 0. \] Using the scalar-triple-product identity \(\mathbf{e}_3\cdot(\boldsymbol{\omega}\times\mathbf{v}) = \boldsymbol{\omega}\cdot(\mathbf{v}\times\mathbf{e}_3) = -(\mathbf{e}_3\times\mathbf{v})\cdot\boldsymbol{\omega}\), \[ \big[\mathbf{v}\cdot(\mathbf{e}_1\times\mathbf{e}_3)\big]\,\dot\theta_1 = (\mathbf{e}_3\times\mathbf{v})^\top\boldsymbol{\omega}. \]

6.2 Pitch constraint rate

Identically, differentiating C2, \(\dot{\mathbf{e}}_4\cdot\mathbf{e}_5 + \mathbf{e}_4\cdot\dot{\mathbf{e}}_5=0\): \[ \big[\mathbf{e}_5\cdot(\mathbf{e}_2\times\mathbf{e}_4)\big]\,\dot\theta_2 = (\mathbf{e}_4\times\mathbf{e}_5)^\top\boldsymbol{\omega}. \]

6.3 Assembled form

Stacking the two scalar equations gives the parallel-robot differential form

Velocity kinematics \[ K\,\dot{\boldsymbol{\theta}} = J_0\,\boldsymbol{\omega},\qquad K=\begin{bmatrix} \mathbf{v}\cdot(\mathbf{e}_1\times\mathbf{e}_3) & 0\\[2pt] 0 & \mathbf{e}_5\cdot(\mathbf{e}_2\times\mathbf{e}_4) \end{bmatrix},\qquad J_0=\begin{bmatrix}(\mathbf{e}_3\times\mathbf{v})^\top\\[2pt](\mathbf{e}_4\times\mathbf{e}_5)^\top\end{bmatrix}. \]

The constraint matrix \(K\) is diagonal: each constraint's actuated term involves only its own motor rate (\(\dot\theta_1\) through \(\mathbf{e}_3\) in C1, \(\dot\theta_2\) through \(\mathbf{e}_4\) in C2), so the velocity constraint Jacobian is decoupled. Within the joint-limited configuration space \(\mathcal{Q}'=\{|\theta_i|<\tfrac{\pi}{2}\}\), neither diagonal entry vanishes: \(\mathbf{e}_1\times\mathbf{e}_3\) and \(\mathbf{v}\) cannot be orthogonal there, so \(K_{11}\neq 0\), and likewise \(K_{22}\neq 0\); hence \(\det K = K_{11}K_{22}\neq 0\) and the map is invertible throughout the workspace.

7. Statics: virtual work and the triangular torque map

In the rigid quasi-static limit the mechanism is lossless, so actuator power equals output power for every feasible motion, \(\boldsymbol{\tau}^\top\dot{\boldsymbol{\theta}} = \mathbf{m}^\top\boldsymbol{\omega}\), where \(\boldsymbol{\tau}=[\tau_1\ \tau_2]^\top\) are the actuator torques and \(\mathbf{m}\) is the external moment applied at the output. The feasible angular velocities form the two-dimensional set \(\boldsymbol{\omega}=J\,\dot{\boldsymbol{\theta}}\), where \(J\) is the \(3\times 2\) output Jacobian with columns \[ \mathbf{j}_i \;=\; \mathrm{vee}\!\left(\frac{\partial R_{\text{out}}}{\partial\theta_i}\,R_{\text{out}}^{\top}\right), \qquad i=1,2, \] and \(J_0 J = K\) connects it to the constraint form of Sec. 6. Substituting and requiring the power balance for all \(\dot{\boldsymbol{\theta}}\) gives the statics directly:

Statics (virtual work) \[ \boldsymbol{\tau} = J^{\top}\mathbf{m}. \]

7.1 The columns of \(J\), and why the map is triangular

Write the forward kinematics of Sec. 4 as \(R_{\text{out}}=R_x(\theta_1)\,R_z\big(q_2(\theta_1,\theta_2)\big)\), using \(q_1=\theta_1\) (exact). Differentiating with the chain rule, \[ \frac{\partial R_{\text{out}}}{\partial\theta_1}R_{\text{out}}^{\top} = [\hat{\mathbf{x}}]_\times + \frac{\partial q_2}{\partial\theta_1}\,[\mathbf{u}]_\times, \qquad \frac{\partial R_{\text{out}}}{\partial\theta_2}R_{\text{out}}^{\top} = \frac{\partial q_2}{\partial\theta_2}\,[\mathbf{u}]_\times, \] where \(\mathbf{u}=R_x(\theta_1)\hat{\mathbf{z}}=\mathbf{e}_3\) is the (moved) pitch output axis and \([\cdot]_\times\) is the skew map. Hence \[ \mathbf{j}_1 = \mathbf{e}_1 + \frac{\partial q_2}{\partial\theta_1}\,\mathbf{e}_3, \qquad \mathbf{j}_2 = \frac{\partial q_2}{\partial\theta_2}\,\mathbf{e}_3. \] Writing \(M_1=\mathbf{m}\cdot\mathbf{e}_1\) and \(M_2=\mathbf{m}\cdot\mathbf{e}_3\) for the moment components about the yaw and pitch output axes, \(\boldsymbol{\tau}=J^\top\mathbf{m}\) reads componentwise:

Triangular torque map \[ \tau_1 = M_1 + M_2\,\frac{\partial q_2}{\partial\theta_1}, \qquad \tau_2 = M_2\,\frac{\partial q_2}{\partial\theta_2}. \]

Because \(q_1=\theta_1\) exactly while \(q_2\) depends on both actuator angles, the input–output map is lower-triangular and \(J^{\top}\) is therefore upper-triangular. The component of \(\mathbf{m}\) outside \(\mathrm{span}\{\mathbf{e}_1,\mathbf{e}_3\}\) does no work on any feasible motion and is reacted by the structure. Two consequences follow immediately:

7.2 The cross-axis gain over the workspace

The gain \(\rho\) is the forward kinematics of Sec. 4 differentiated, a closed-form function of the motor angles. Its structure:

\(\theta_1\backslash\theta_2\)−40°−30°−20°−10°+10°+20°+30°+40°
−40°33.830.022.412.0−12.0−22.4−30.0−33.8
−30°22.019.814.98.0−8.0−14.9−19.8−22.0
−20°12.011.18.54.6−4.6−8.5−11.1−12.0
−10°3.03.22.61.5−1.5−2.6−3.2−3.0
+10°−14.5−12.2−8.8−4.64.68.812.214.5
+20°−24.1−20.7−15.1−8.08.015.120.724.1
+30°−35.4−30.7−22.6−12.012.022.630.735.4
+40°−49.7−43.5−32.2−17.117.132.243.549.7

Cross-axis gain \(\rho=(\partial q_2/\partial\theta_1)/(\partial q_2/\partial\theta_2)\) in percent over the motor-angle workspace. \(\rho\) is odd in \(\theta_2\); the mild asymmetry in \(\theta_1\) is the \(\alpha=5^\circ\) twist.

7.3 Exact compensation

Since the coupling is known in closed form at every measured motor pose, the triangular map inverts by back-substitution: \[ M_2 = \tau_2\Big/\frac{\partial q_2}{\partial\theta_2}, \qquad M_1 = \tau_1 - M_2\,\frac{\partial q_2}{\partial\theta_1}. \] The diagonal (one-actuator-per-DOF) approximation is exact where \(\rho=0\) (the entire line \(\theta_2=0\), and within \(6\%\) along \(\theta_1=0\)); elsewhere its error is exactly the gain \(\rho\) tabulated above, which this compensation removes.

7.4 Bench verification

Hanging known masses on each output axis in turn and reading the opposite actuator confirms both predictions: the yaw-loaded pitch torque is null (\(2.2\) percentage points RMS, at the fixture noise floor), and the pitch-loaded yaw torque matches the predicted coupling at \(0.96\times\). The worst residual against \(\boldsymbol{\tau}=J^{\top}\mathbf{m}\) is \(0.044\) N·m, \(1.2\%\) of rated torque and \(7.5\times\) below the wrist's backdrive friction. Full protocol and data →

8. CAD verification

The forward map was checked against the CAD model at four configurations spanning the range. The CAD frame reports the home output as \(-\hat{\mathbf{y}}\) rather than \(+\hat{\mathbf{y}}\); this is a single global sign on \(\mathbf{v}\), and the values below are the CAD sign convention. All components agree to four decimals.

\((\theta_1,\theta_2)\)\(v_x\)\(v_y\)\(v_z\)
\((20^\circ,\ 0^\circ)\)\(0\)\(-0.9397\)\(-0.3420\)
\((0^\circ,\ 20^\circ)\)\(0.3420\)\(-0.9397\)\(0\)
\((20^\circ,\ 20^\circ)\)\(0.3721\)\(-0.8722\)\(-0.3175\)
\((-20^\circ,\ 20^\circ)\)\(0.3508\)\(-0.8800\)\(0.3203\)

The kinematics and statics were also checked numerically over a 17×17 grid of the full \(\pm 40^\circ\) workspace: the velocity relation of Sec. 6 agrees with the exact Jacobian to \(1.5\times 10^{-9}\), the triangular form of Sec. 7.1 equals \(J^{\top}\mathbf{m}\) to \(4.4\times 10^{-16}\) N·m, and \(\boldsymbol{\tau}=J^{\top}\mathbf{m}\) agrees with direct potential-energy differentiation to \(3.1\times 10^{-9}\) N·m.