# Using Full Pose Measurement for Serial Robot Calibration
## 2 Background  
The frame \(\mathbf{F}_{TCP}\) associated with the robot's Tool Center Point (TCP) coordinate system can be expressed as a 4 \(\times\) 4 homogeneous transformation consisting of a 3 \(\times\) 3 rotation matrix \(\mathbf{R}\) and a 3 \(\times\) 1 translation vector \(\mathbf{t}\):  
\[\mathbf{F}_{TCP}=\left[\begin{array}{cc}\mathbf{R}_{3\times 3}&\mathbf{t}_{3\times 1}\\ \mathbf{0}_{1\times 3}&1\end{array}\right] \tag{1}\]  
For a serial, open-chain collaborative robot arm with \(N\) revolute joints, the frame \(\mathbf{F}_{TCP}\) in the robot's base coordinate system can be determined using a forward kinematic model:  
\[\mathbf{F}_{TCP}(\mathbf{\theta}_{k})=\mathbf{F}_{1}\mathbf{F}_{2}\ldots\mathbf{F}_{N}\mathbf{F}_{T} \tag{2}\]  
where  
\[\mathbf{\theta}_{k}=[\theta_{1,k},\theta_{2,k^{\prime}},\ldots,\theta_{n,k^{\prime }},\ldots,\theta_{N,k}] \tag{3}\]  
and \(\theta_{n,k}\) is the encoder angle of the \(n\)-th revolute joint for the \(k\)-th robot configuration, \(\mathbf{F}_{n}\) is the homogeneous transformation associated with the \(n\)-th joint, \(n=1,\ldots,N\), and \(\mathbf{F}_{T}\) is a transformation from the robot's flange frame to the TCP. Using the nominal DH parameters, the rotation component of each \(\mathbf{F}_{n}\) can be written as  
\[\mathbf{R}_{n,k}(\theta_{n,k},\mathbf{e}_{n},\mathbf{\alpha}_{n})=\mathbf{R}_{z}(\theta_{n,k} +\mathbf{e}_{n})\mathbf{R}_{x}(\mathbf{\alpha}_{n}) \tag{4}\]where \(\mathbf{R}_{z}\) and \(\mathbf{R}_{x}\) are rotations around \(z\) and \(x\) axis, respectively. Two angular DH parameters in (4) are \(\alpha_{n}\) (the link twist) and \(\epsilon_{n}\) (the zero offset angle for the \(n\)-th encoder). The translation component of \(\mathbf{F}_{n}\) can be expressed as  
\[\mathbf{t}_{n}=\big{[}\begin{array}{cc}r_{n}\cos(\theta_{n,k}+\epsilon_{n})&r_{n }\sin(\theta_{n,k}+\epsilon_{n})&d_{n}\end{array}\big{]}^{T}, \tag{5}\]  
where \(r_{n}\) and \(d_{n}\) are two linear DH parameters (link length and offset), and \(\big{[}\dots\big{]}^{T}\) denotes the vector transpose.  
From (2) and (4) it can be seen that the rotation part \(\mathbf{R}_{TCP}\) of the \(\mathbf{F}_{TCP}\) frame depends only on the rotation components  
\[\mathbf{R}_{TCP}(\theta_{k})=\mathbf{R}_{1,k}\mathbf{R}_{2,k}\dots\mathbf{R}_{N,k}\mathbf{R}_{T}. \tag{6}\]  
This is a general property of serial chain manipulators with revolute joints, and is not dependent on a particular kinematic model (here, we use the DH model for illustration purposes only). In the remainder of this paper, we use the notation  
\[\mathbf{R}_{k}=\mathbf{R}_{TCP}(\theta_{k},\mathbf{\alpha},\mathbf{\epsilon}) \tag{7}\]  
where \(\mathbf{\alpha}=[\alpha_{1},\alpha_{2},\dots,\alpha_{N}]\) and \(\mathbf{\epsilon}=[\epsilon_{1},\epsilon_{2},\dots,\epsilon_{N}]\) are the vectors of the DH angular parameters. Note that the positional component \(\mathbf{t}_{k}\) of the \(\mathbf{F}_{TCP}(\theta_{k})\) frame depends on joint angles and all four vectors of the DH parameters:  
\[\mathbf{t}_{k}=\mathbf{t}_{TCP}(\theta_{k},\mathbf{\alpha},\mathbf{\epsilon},\mathbf{r},\mathbf{d}). \tag{8}\]