# The Forward and Inverse Kinematics of a Delta Robot

Hugo Hadfield, Lai Wei, Joan Lasenby

University Of Cambridge,

Signal Processing and Communications Laboratory

Speaker: Hugo Hadfield

## Geometry of a Delta Robot

Image source: AEMK Systems

## Derivatives for the Jacobians

• In order to calculate the jacobians we will need some derivatives, let's put together a little collection:
• Derivative of a CGA point with respect to a parameter of the 3D point
• Derivative of the intersection of a circle and a sphere with respect to a parameter of the sphere centre
• Derivative of the intersection of three spheres to make a point pair
• Derivative of the extraction of the end points from a point pair
• Derivative of a 3D point with respect to parameters of its conformal equivalent

## Derivative of a CGA point with respect to a parameter of the 3D point

• The 3D point $$x_i$$ can then be represented as the CGA point $$X_i$$:
X_i = \frac{1}{2}x_i^2n_\infty + x_i + n_0
\frac{\partial X_i}{\partial \alpha} = \left( \frac{\partial x_i}{ \partial \alpha}\cdot x_i \right)n_\infty + \frac{\partial x_i}{\partial \alpha}
• We can then take the derivative of the CGA point with respect to a parameter of the 3DGA point, $$\alpha$$ :

## Derivative of the intersection of a circle and a sphere with respect to a parameter of the sphere centre

• Consider the form of the dual CGA sphere:
\newcommand{\la}{\langle} \newcommand{\ra}{\rangle} \newcommand{\nn}{\nonumber} \newcommand{\ninf}{n_{\infty}} \newcommand{\einf}{e_{\infty}} \newcommand{\no}{n_{0}} \newcommand{\eo}{e_{0}} \newcommand{\wdg}{\wedge} \newcommand{\pdiff}[2]{\frac{\partial #1}{\partial #2} } \pdiff{T}{\alpha} = \left(\pdiff{\Sigma^*}{\alpha}\wedge C^*\right)^*
\newcommand{\la}{\langle} \newcommand{\ra}{\rangle} \newcommand{\nn}{\nonumber} \newcommand{\ninf}{n_{\infty}} \newcommand{\einf}{e_{\infty}} \newcommand{\no}{n_{0}} \newcommand{\eo}{e_{0}} \newcommand{\wdg}{\wedge} \newcommand{\pdiff}[2]{\frac{\partial #1}{\partial #2} } \Sigma^* = X - \frac{1}{2}\rho^2\ninf
\newcommand{\la}{\langle} \newcommand{\ra}{\rangle} \newcommand{\nn}{\nonumber} \newcommand{\ninf}{n_{\infty}} \newcommand{\einf}{e_{\infty}} \newcommand{\no}{n_{0}} \newcommand{\eo}{e_{0}} \newcommand{\wdg}{\wedge} \newcommand{\pdiff}[2]{\frac{\partial #1}{\partial #2} } \pdiff{\Sigma^*}{\alpha} = \pdiff{X}{\alpha}
• Take derivatives with respect to a parameter $$\alpha$$ of the centre of the sphere:
• Finally consider the meet of the sphere and a fixed circle C, giving a point pair T:
\newcommand{\la}{\langle} \newcommand{\ra}{\rangle} \newcommand{\nn}{\nonumber} \newcommand{\ninf}{n_{\infty}} \newcommand{\einf}{e_{\infty}} \newcommand{\no}{n_{0}} \newcommand{\eo}{e_{0}} \newcommand{\wdg}{\wedge} \newcommand{\pdiff}[2]{\frac{\partial #1}{\partial #2} } T = \left(\Sigma^* \wedge C^* \right)^*

## Derivative of the intersection of three spheres to make a point pair

• The point pair at the intersection of three spheres is given by:
T = (\Sigma_1\vee \Sigma_2 \vee \Sigma_3) \equiv (\Sigma_1^*\wedge \Sigma_2^*\wedge \Sigma_3^*)^*
\newcommand{\la}{\langle} \newcommand{\ra}{\rangle} \newcommand{\nn}{\nonumber} \newcommand{\ninf}{n_{\infty}} \newcommand{\einf}{e_{\infty}} \newcommand{\no}{n_{0}} \newcommand{\eo}{e_{0}} \newcommand{\wdg}{\wedge} \newcommand{\pdiff}[2]{\frac{\partial #1}{\partial #2} } \pdiff{T}{\theta_1} = \left(\pdiff{\Sigma_1^*}{\theta_1}\wedge \Sigma_2^*\wedge \Sigma_3^*\right)^* , \hspace{0.1cm} \pdiff{T}{\theta_2} = \left( \Sigma_1^*\wedge \pdiff{\Sigma_2^*}{\theta_2}\wedge \Sigma_3^*\right)^* \\ \pdiff{T}{\theta_3} = \left(\Sigma_1^* \wedge \Sigma_2^*\wedge \pdiff{\Sigma_3^*}{\theta_3}\right)^*
• And so the derivatives of the point pair with respect to a parameter of each sphere individually is:
\newcommand{\la}{\langle} \newcommand{\ra}{\rangle} \newcommand{\nn}{\nonumber} \newcommand{\ninf}{n_{\infty}} \newcommand{\einf}{e_{\infty}} \newcommand{\no}{n_{0}} \newcommand{\eo}{e_{0}} \newcommand{\wdg}{\wedge} \newcommand{\pdiff}[2]{\frac{\partial #1}{\partial #2} } \pdiff{T}{\theta_i} = (-1)^{i-1}\left(\pdiff{\Sigma_i^*}{\theta_i}\wedge C^*\right)^* , \hspace{0.1cm} \text{where} \,\,\, C^* = \bigwedge_{j \in {1,2,3} \,\,\, j\ne i}\Sigma_j^*
• This can also be written as:

## Derivative of the extraction of the end points from a point pair

• To extract the end points of a point pair T we will follow the method given in [CovApproach]. First construct a projector:
\newcommand{\la}{\langle} \newcommand{\ra}{\rangle} \newcommand{\nn}{\nonumber} \newcommand{\ninf}{n_{\infty}} \newcommand{\einf}{e_{\infty}} \newcommand{\no}{n_{0}} \newcommand{\eo}{e_{0}} \newcommand{\wdg}{\wedge} \newcommand{\pdiff}[2]{\frac{\partial #1}{\partial #2} } P = \frac{1}{2}\left(1 + \frac{T}{\sqrt{T^2}}\right) , \hspace{0.2cm} \pdiff{P}{\alpha} = \frac{1}{2T^2}\left(\sqrt{T^2}\pdiff{T}{\alpha} - T\frac{\pdiff{T}{\alpha}\cdot T}{\sqrt{T^2}}\right)
\newcommand{\la}{\langle} \newcommand{\ra}{\rangle} \newcommand{\nn}{\nonumber} \newcommand{\ninf}{n_{\infty}} \newcommand{\einf}{e_{\infty}} \newcommand{\no}{n_{0}} \newcommand{\eo}{e_{0}} \newcommand{\wdg}{\wedge} \newcommand{\pdiff}[2]{\frac{\partial #1}{\partial #2} } Y = -\tilde{P}(T\cdot n_\infty)P
\newcommand{\la}{\langle} \newcommand{\ra}{\rangle} \newcommand{\nn}{\nonumber} \newcommand{\ninf}{n_{\infty}} \newcommand{\einf}{e_{\infty}} \newcommand{\no}{n_{0}} \newcommand{\eo}{e_{0}} \newcommand{\wdg}{\wedge} \newcommand{\pdiff}[2]{\frac{\partial #1}{\partial #2} } \pdiff{Y}{\alpha} = -\pdiff{\tilde{P}}{\alpha}(T\cdot n_\infty)P -\tilde{P}\left(\pdiff{T}{\alpha}\cdot n_\infty\right)P -\tilde{P}(T\cdot n_\infty)\pdiff{P}{\alpha}
• Then use it to project out a point:

## Derivative of a 3D point with respect to parameters of its conformal equivalent

• To map back from a conformal point to a standard point we need to normalise by $$Y\cdot n_\infty$$
\newcommand{\la}{\langle} \newcommand{\ra}{\rangle} \newcommand{\nn}{\nonumber} \newcommand{\ninf}{n_{\infty}} \newcommand{\einf}{e_{\infty}} \newcommand{\no}{n_{0}} \newcommand{\eo}{e_{0}} \newcommand{\wdg}{\wedge} \newcommand{\pdiff}[2]{\frac{\partial #1}{\partial #2} } y = \frac{-\sum_{j=1}^{j=3}(Y\cdot e_j)e_j}{Y\cdot n_\infty}
\newcommand{\la}{\langle} \newcommand{\ra}{\rangle} \newcommand{\nn}{\nonumber} \newcommand{\ninf}{n_{\infty}} \newcommand{\einf}{e_{\infty}} \newcommand{\no}{n_{0}} \newcommand{\eo}{e_{0}} \newcommand{\wdg}{\wedge} \newcommand{\pdiff}[2]{\frac{\partial #1}{\partial #2} } \pdiff{y}{\theta_i} = \frac{ -\sum_{j=1}^{j=3}\left(\pdiff{Y}{\theta_i}\cdot e_{j}\right)e_j (Y\cdot\ninf) + \sum_{j=1}^{j=3}\left(Y\cdot e_{j}\right)e_j (\pdiff{Y}{\theta_i}\cdot\ninf) }{ (Y\cdot\ninf)^2 }
• And so we can calculate our final derivative:

## Verification and Visualisation of the Robot in Clifford Python

• We have implemented all of these derivatives in Clifford Python and tested them vs central differences with visualisation via pyganja

## Designing Practical Controllers for the Delta Robot

• To design practical controllers for real robots we need to do some kind of dynamic modelling
• We also need a mechanism for  modelling environmental disturbances
• We would like someone else to write the physics code - not the point of this paper
• We would like easy visualisation of everything in real time

Game engines tick all the boxes

## Setting up Unity3D as a Simulation Environment

• Unity3D is programmed in C#
• Generated a C# library with ganja.js
• Fleshed out library to integrate with Unity3D
• Built a physical model of the robot
• Attached the CGA controller to it

## Future Work

• Constructing a dynamic model of the delta robot within our GA framework will let us use more interesting controller designs and test physical design parameters

• We plan to connect our simulated robot and controller to a real Delta robot via ROS

• We plan to improve the Unity3D C# (C)GA library to allow fast iteration of robot/games/graphics related applied research

## Conclusions

• (C)GA can provide a very useful framework for describing the kinematics of parallel robots

• Putting together a "data book" of derivatives of common operations in (C)GA would be very useful to practitioners trying to use GA in practice/in industry (boring but comprehensive is good?)

• There already exists a wide range of modern GA software packages of high quality but integration with game engines is very useful and hence desirable

By Hugo Hadfield

• 959