1 Introduction

Industrial robots are an important part of the current and future automation systems, especially for manufacturing and assembly. Currently, many of these robots are based on serial mechanisms, which suffer from limited flexibility, low stiffness, and inadequate precision for some applications (Dressler et al. 2007a). For some industrial applications, such as grinding or machining where high stiffness is required, parallel robots are of special interest (Patel and George 2012; Pedrammehr et al. 2011a, 2013, 2014; Kong and Gosselin 2007; Qazani et al. 2014, 2018; Pedrammehr 2012). Among parallel robots, there is a high level of focus on the Stewart platform manipulator (Li et al. 2017; Pedrammehr et al. 2011b, 2012; Harib and Srinivasan 2003; Rahmani et al. 2014); however, this platform has limited application due to its small workspace. The SCARA Delta robot was introduced to reduce some of the limitations in common parallel robots. Kinematic and dynamic analyses of this robot have been studied in Zhu et al. (2005) and Crothers et al. (2009). This mechanism also has some limitations in its workspace and relatively small payload. Therefore, the SCARA-Tau concept has been extended to six degree-of-freedom (DOF) octahedral hexarot mechanisms in Pedrammehr et al. (2016, 2017, 2018a, b, c, d, 2019a, b, c).

Since the introduction of the Gantry-Tau mechanism by Johannesson et al. (2003), several researchers have performed different studies of it. The first Gantry-Tau prototype was built at the University of Queensland, in 2004 (Tyapin et al. 2007a), and its workspace has been extracted with a geometric method. Williams et al. (2006) have introduced the early version of the Gantry-Tau mechanism with three DOF. The kinematic error model and calibration method have also been presented in their study. Later, a five DOF Gantry-Tau mechanism has been introduced by Murray et al. (2006), and the inverse kinematic model of it has been developed. It has also shown that the collisions can be avoided by appropriate platform design. The triangle arm and the end-effector platform were designed to maximize the workspace area of the mechanism (Murray et al. 2008; Tyapin et al. 2007b). The benefits of exchanging the single-link arm of the three-DOF version with telescopic actuator have been investigated in Hovland et al. (2007a). Due to the importance of calibration of robotic systems, the subject of calibration has been widely discussed within the robotics community (Daney et al. 2006; Yoosefi and Rahmani 2017; Arora and Bera 2017; Ebrahimi and Eshaghiyeh-Firoozabadi 2016). The optimization techniques for calibration of the different parallel mechanisms have also been studied and compared in the reported literature (Ridgeway and Crane 2003; Daney et al. 2005). Johannesson et al. (2003) and Mady (2012) have studied the error kinematic modeling and calibration of the three-DOF Gantry-Tau mechanism. Dressler et al. (2007a, b, 2010) have investigated the accuracy of the kinematic and dynamic models of the Gantry-Tau mechanism. The configuration support for a reconfigurable Gantry-Tau mechanism as well as its kinematic error model has also been addressed in their research works.

In this paper, first, a CAD model of an existing Gantry-Tau mechanism in the Institute for Intelligent Systems Research and Innovation (IISRI) at Deakin University is built. Then, the inverse kinematics model of the mechanism is developed and validated through the CAD model. Workspace of the mechanism is obtained based on the joint and collision limitations and singularities with a considerably high footprint. The region of workspace with a high level of dexterity is also determined. The kinematics error of the mechanism is investigated; then, the calibration method is studied using the SimMechanics model of the mechanism. Hence, the main contribution of this paper is a full derivation of the kinematics and kinematic error formulation, the dexterity analysis of the robot, and the simulation and evaluation of the calibration efficiency through a SimMechanics model of the Gantry-Tau manipulator. This allows us to quickly perform performance evaluation and testing of the proposed calibration method and compare different methods or algorithms for calibration.

2 Gantry-Tau Mechanism

The Gantry-Tau manipulator is basically a three-DOF parallel kinematic robot. This robot consists of three active prismatic guideways and six passive links connecting the active joints to the end-effector platform that shape three sets of arms (See Fig. 1). The arms are connected to the prismatic joints through a cart mechanism.

Fig. 1
figure 1

Gantry-Tau mechanism

As shown in the schematic model of the Gantry-Tau mechanism in Fig. 2a, arms 1, 2, and 3, respectively, consist of 1, 2, and 3 links that are connecting between the carts and the platform. The simple mechanism of the passive links allows flexibility in the geometric design of the linkages and leads to low manufacturing costs for these robots. The triangular 3-link arm has several advantages including the capability of reconfiguring the robot (Hovland et al. 2007b). This reconfiguration capability is achieved by flipping the links to the other side of the carts. The spherical joint offsets on the actuator side are reduced, and the robot has larger reachable workspace limits and no inter-workspace singularity points. However, the constant end-effector orientation could lead to a collision between links and platform. The joints between the links with the carts and the platform are passive spherical joints. This, however, brings the advantage that the platform and the links could be light weight, which could significantly increase the frequency bandwidth of the robot resulting in high acceleration and velocity. The position of the spherical joints on the platform and the carts according to the so-called Tau configuration are such that the links within the arms 2 and 3 form vertices of a parallelogram. This creates a constant orientation and a purely translational movement of the platform.

Fig. 2
figure 2

a The schematic model of the Gantry-Tau mechanism; b the CAD model

Figure 2b shows A CAD model that has been developed for this mechanism in CATIA software environment using the geometric parameters of the Gantry-Tau manipulator given in the “Appendix.” In this design, the length of the passive link is two meters and the length of the guideways is three meters. The platform of the mechanism has an angle of 45° with the x axis of the guideway and 60° with the y axis. The Gantry-Tau manipulator could be easily reconfigured with different link lengths and cart angles.

A SimMechanics model for the Gantry-Tau manipulator has been developed based on the multi-rigid-body method that is shown in Fig. 3a. In this model, the three solver configuration, world frame, and mechanism configuration generate the systems environment and simulation characteristics. There are three translational blocks for each guideway which have been shown as Guideways 1 to 3. The mechanisms of the prismatic joints have been presented as Joints 1 to 3. There are a single-link, double-link, and triple-link blocks that are, respectively, used for modeling of the arms 1, 2, and 3. The last block is named platform, which contains the sub-blocks building the end-effector platform and its connections to the links. This SimMechanics model allows us to perform kinematics and dynamics analysis. Figure 3b shows the graphical output of the SimMechanics model for the Gantry-Tau mechanism.

Fig. 3
figure 3

a The main blocks of the SimMechanics model of the Gantry-Tau mechanism; b the graphical representation of the developed SimMechanics model

3 Kinematics Modeling

For many of the parallel robots, the position forward kinematics of the robot cannot be obtained in a closed mathematical form. Hence, the kinematics modeling commonly starts by studying the inverse kinematics. Moreover, to the best of the authors’ knowledge, the full kinematics of position, velocity, and acceleration of the Gantry-Tau mechanism has not been given in the literature yet. Therefore, the kinematics of the mechanism is derived in this section and is used for workspace and error analyses in other sections.

3.1 Inverse Kinematics

The inverse kinematics of the Gantry-Tau mechanism involves the determination of the displacement, velocity, and acceleration of the three joints on the guides for a given end-effector position, velocity, and acceleration (Pedrammehr et al. 2012).

Kinematics modeling vector notation for the Gantry-Tau manipulator is presented in Fig. 4. The x direction of the world coordinate frame W is assumed to be in the direction of the guideways, and its z axis is vertical. It is also assumed that \({\mathbf{a}}_{i}^{s}\), with i = 1 to 3, is a fixed vector pointing from the origin of the world coordinate frame to the point at the start position of the ith guideway. qi is a vector from the starting point of the ith guideway to the position of the prismatic joint on that guideway. cik is also a fixed vector pointing from the position of the prismatic joint on the ith guideway to the kth joint of the ith cart. Here, the subscript k indicates the number of the links in each arm set, and for arm 1 (i = 1 and k = 1), for arm 2 (i = 2 and k = 1, 2), and for arm 3 (i = 3 and k = 1, 2, 3).

Fig. 4
figure 4

The vector representation of the Gantry-Tau mechanism

The position of the kth spherical joint of the ith arm is defined in the world coordinate as:

$${\mathbf{a}}_{ik} = {\mathbf{a}}_{i}^{s} + {\mathbf{q}}_{i} + {\mathbf{c}}_{ik}$$
(1)

One characteristic of the Gantry-Tau mechanism is that the positions of the spherical joints on the platform and carts are such that the links within either arm 2 or 3 form parallelograms. The positions of the spherical joints on the cart are fixed, and they only have linear movement because of qi. This, however, assures that the orientation of the platform will not change with the movement of the active joints. Therefore, the motion of the platform is purely 3D translational. This property simplifies the kinematics model into only translation vectors and does not require rotation transformation. In addition, it is inferred that the vectors between the platform spherical joint positions and any point on the platform will remain with no angular change with the movement of the actuated joints; hence, they are constant vectors. According to Fig. 4, dik is a constant vector which relates any of the platform spherical joints to the origin of tool center point coordinate frame (TCP) which is at an arbitrary center of the platform.

The position of the spherical joints on the platform, bik, can be obtained as:

$${\mathbf{b}}_{ik} = {\mathbf{a}}_{i}^{s} + {\mathbf{q}}_{i} + {\mathbf{c}}_{ik} + {\mathbf{l}}_{ik}$$
(2)

where lik is the length vector denoting the relationship between the joint on the cart of the kth link of the ith arm, which has a fixed length but variable direction, and can be obtained as:

$${\mathbf{l}}_{ik} = {\mathbf{a}}_{ik} - {\mathbf{b}}_{ik}$$
(3)

T is the position of the TCP coordinate frame and can be obtained as the following:

$${\mathbf{T}} = {\mathbf{b}}_{ik} + {\mathbf{d}}_{ik} = {\mathbf{f}}_{i} + {\mathbf{q}}_{i} + {\mathbf{l}}_{ik}$$
(4)

where \({\mathbf{f}}_{i} = {\mathbf{a}}_{i}^{s} + {\mathbf{d}}_{ik} + {\mathbf{c}}_{ik}\), and this vector is constant, as all its components are constant.

The kinematic constraint for the ith kinematic chain is as the following:

$${\mathbf{l}}_{ik} = {\mathbf{T}} - {\mathbf{f}}_{i} - {\mathbf{q}}_{i}$$
(5)
$$\left\| {{\mathbf{l}}_{ik} } \right\|^{2} = \left\| {{\mathbf{T}} - {\mathbf{f}}_{i} - {\mathbf{q}}_{i} } \right\|^{2}$$
(6)

The below constraints reduce the number of the equations of Eq. (6) from 2 to 1 for the arm 2, and from 3 to 1 for the arm 3.

$${\mathbf{d}}_{2\,\,1} + {\mathbf{l}}_{2\,\,1} + {\mathbf{c}}_{2\,\,1} = {\mathbf{d}}_{2\,\,2} + {\mathbf{l}}_{2\,\,2} + {\mathbf{c}}_{2\,\,2}$$
(7)
$${\mathbf{d}}_{3\,\,1} + {\mathbf{l}}_{3\,\,1} + {\mathbf{c}}_{3\,\,1} = {\mathbf{d}}_{3\,\,2} + {\mathbf{l}}_{3\,\,2} + {\mathbf{c}}_{3\,\,2} = {\mathbf{d}}_{3\,\,3} + {\mathbf{l}}_{3\,\,3} + {\mathbf{c}}_{3\,\,3}$$
(8)

It was mentioned earlier that the vectors qi are in the x direction only, i.e., \({\mathbf{q}}_{i} = \left[ {\begin{array}{*{20}c} {(q_{i} )_{x} } & 0 & 0 \\ \end{array} } \right]^{\text{T}}\). Therefore, the inverse kinematics of position can be obtained with:

$$(q_{i} )_{x} = (T)_{x} - (F_{i} )_{x} - \sqrt {l_{ik}^{2} - \left( {(f_{i} )_{y} - (T)_{y} } \right)^{2} - \left( {(f_{i} )_{z} - (T)_{z} } \right)^{2} }$$
(9)

where x, y, z indices show the x, y, and z components of the vectors and \(l_{ik}\) is the length of the corresponding link. The negative sign before the square root operators is because qi is always less than \((T)_{x}\). \({\mathbf{l}}_{ik} = \left[ {\begin{array}{*{20}c} {\left( {l_{ik} } \right)_{x} } & {\left( {l_{ik} } \right)_{y} } & {\left( {l_{ik} } \right)_{z} } \\ \end{array} } \right]^{\text{T}}\) can also be determined by substituting the joint positions from Eq. (9) into Eq. (5).

The joint velocity, \({\dot{\mathbf{q}}}_{i}\), can be obtained by taking the time derivative on both sides of Eq. (2), which gives:

$${\dot{\mathbf{q}}}_{i} = {\dot{\mathbf{T}}} - \underbrace {{{\varvec{\upomega}}_{{l_{ik} }} \times {\mathbf{l}}_{ik} }}_{{{\dot{\mathbf{l}}}_{ik} }}$$
(10)

where \({\dot{\mathbf{T}}}\) is the platform positional velocity, and \({\dot{\mathbf{l}}}_{ik}\) is the velocity of each passive link. \({\dot{\mathbf{T}}}\) can be obtained by taking inner product of both sides of Eq. (10) with \({\mathbf{l}}_{ik}\), which gives:

$${\dot{\mathbf{q}}}_{i} \cdot {\mathbf{l}}_{i} = {\dot{\mathbf{T}}} \cdot {\mathbf{l}}_{i}$$
(11)

where \({\dot{\mathbf{q}}}_{i} = (q_{i} )_{x} {\hat{\mathbf{i}}}\) and \({\hat{\mathbf{i}}}\) is the unit vector along x axis. The velocity of the links can be related to the velocity of the end effector as:

$${\mathbf{J}}_{{\mathbf{q}}} {\dot{\mathbf{q}}} = {\mathbf{J}}_{{\mathbf{T}}} {\dot{\mathbf{T}}}$$
(12)

where \({\mathbf{J}}_{{\mathbf{q}}}\) and \({\mathbf{J}}_{{\mathbf{T}}}\) are, respectively, the inverse and forward Jacobian matrices and can be obtained as the following:

$${\mathbf{J}}_{{\mathbf{q}}} = \left[ {\begin{array}{*{20}c} {{\hat{\mathbf{i}}} \cdot {\mathbf{l}}_{1} } & 0 & 0 \\ 0 & {{\hat{\mathbf{i}}} \cdot {\mathbf{l}}_{2} } & 0 \\ 0 & 0 & {{\hat{\mathbf{i}}} \cdot {\mathbf{l}}_{2} } \\ \end{array} } \right]$$
(13)
$$\,{\mathbf{J}}_{{\mathbf{T}}} = \left[ {\begin{array}{*{20}c} {{\mathbf{l}}_{1}^{\text{T}} } \\ {{\mathbf{l}}_{2}^{\text{T}} } \\ {{\mathbf{l}}_{3}^{\text{T}} } \\ \end{array} } \right]$$
(14)

Therefore, the inverse velocity kinematics of the mechanism in closed form will be as:

$${\dot{\mathbf{q}}} = {\mathbf{J}}_{\text{q}}^{ - 1} {\mathbf{J}}_{\text{T}} {\dot{\mathbf{T}}} = {\mathbf{J\dot{T}}}$$
(15)

where \({\dot{\mathbf{q}}} = \left[ {\begin{array}{*{20}c} {\left( {\dot{q}_{1} } \right)_{x} } & {\left( {\dot{q}_{2} } \right)_{x} } & {\left( {\dot{q}_{3} } \right)_{x} } \\ \end{array} } \right]^{\text{T}}\) is the velocity of the joints, and \({\dot{\mathbf{T}}} = \left[ {\begin{array}{*{20}c} {\left( {\dot{T}} \right)_{x} } & {\left( {\dot{T}} \right)_{y} } & {\left( {\dot{T}} \right)_{z} } \\ \end{array} } \right]^{\text{T}}\) is the velocity of the platform. J is the inverse Jacobian matrix of the mechanism that can be defined as:

$${\mathbf{J}} = \left[ {\begin{array}{*{20}c} 1 & {{{\left( {l_{1k} } \right)_{y} } \mathord{\left/ {\vphantom {{\left( {l_{1k} } \right)_{y} } {\left( {l_{1k} } \right)_{x} }}} \right. \kern-0pt} {\left( {l_{1k} } \right)_{x} }}} & {{{\left( {l_{1k} } \right)_{z} } \mathord{\left/ {\vphantom {{\left( {l_{1k} } \right)_{z} } {\left( {l_{1k} } \right)_{x} }}} \right. \kern-0pt} {\left( {l_{1k} } \right)_{x} }}} \\ 1 & {{{\left( {l_{2k} } \right)_{y} } \mathord{\left/ {\vphantom {{\left( {l_{2k} } \right)_{y} } {\left( {l_{2k} } \right)_{x} }}} \right. \kern-0pt} {\left( {l_{2k} } \right)_{x} }}} & {{{\left( {l_{2k} } \right)_{z} } \mathord{\left/ {\vphantom {{\left( {l_{2k} } \right)_{z} } {\left( {l_{2k} } \right)_{x} }}} \right. \kern-0pt} {\left( {l_{2k} } \right)_{x} }}} \\ 1 & {{{\left( {l_{3k} } \right)_{y} } \mathord{\left/ {\vphantom {{\left( {l_{3k} } \right)_{y} } {\left( {l_{3k} } \right)_{x} }}} \right. \kern-0pt} {\left( {l_{3k} } \right)_{x} }}} & {{{\left( {l_{3k} } \right)_{z} } \mathord{\left/ {\vphantom {{\left( {l_{3k} } \right)_{z} } {\left( {l_{3k} } \right)_{x} }}} \right. \kern-0pt} {\left( {l_{3k} } \right)_{x} }}} \\ \end{array} } \right]$$
(16)

Applying the time derivative on the two sides of Eq. (15) gives the joint acceleration, \({\mathbf{\ddot{q}}}\), as follows:

$${\mathbf{\ddot{q}}} = {\mathbf{J\ddot{T}}} + \left( {{{{\text{d}}{\mathbf{J}}} \mathord{\left/ {\vphantom {{{\text{d}}{\mathbf{J}}} {{\text{d}}t}}} \right. \kern-0pt} {{\text{d}}t}}} \right){\dot{\mathbf{T}}}$$
(17)

where \({\mathbf{\ddot{T}}}\) is the translational acceleration of the platform and \(\left( {{{{\text{d}}{\mathbf{J}}} \mathord{\left/ {\vphantom {{{\text{d}}{\mathbf{J}}} {{\text{d}}t}}} \right. \kern-0pt} {{\text{d}}t}}} \right)\) can be obtained as:

$$\left( {{{{\text{d}}{\mathbf{J}}} \mathord{\left/ {\vphantom {{{\text{d}}{\mathbf{J}}} {{\text{d}}t}}} \right. \kern-0pt} {{\text{d}}t}}} \right) = \left[ {\begin{array}{*{20}c} 0 & {{{\left( {\left( {\omega_{{l_{1k} }} } \right)_{y} \left( {l_{1k} } \right)_{z} - \left( {\omega_{{l_{1k} }} } \right)_{z} \left( {l_{1k} } \right)_{y} } \right)} \mathord{\left/ {\vphantom {{\left( {\left( {\omega_{{l_{1k} }} } \right)_{y} \left( {l_{1k} } \right)_{z} - \left( {\omega_{{l_{1k} }} } \right)_{z} \left( {l_{1k} } \right)_{y} } \right)} {\left| {\left( {l_{1k} } \right)_{y} } \right|^{2} }}} \right. \kern-0pt} {\left| {\left( {l_{1k} } \right)_{y} } \right|^{2} }}} & {{{\left( {\left( {\omega_{{l_{1k} }} } \right)_{y} \left( {l_{1k} } \right)_{z} - \left( {\omega_{{l_{1k} }} } \right)_{z} \left( {l_{1k} } \right)_{y} } \right)} \mathord{\left/ {\vphantom {{\left( {\left( {\omega_{{l_{1k} }} } \right)_{y} \left( {l_{1k} } \right)_{z} - \left( {\omega_{{l_{1k} }} } \right)_{z} \left( {l_{1k} } \right)_{y} } \right)} {\left| {\left( {l_{1k} } \right)_{z} } \right|^{2} }}} \right. \kern-0pt} {\left| {\left( {l_{1k} } \right)_{z} } \right|^{2} }}} \\ 0 & {{{\left( {\left( {\omega_{{l_{2k} }} } \right)_{y} \left( {l_{2k} } \right)_{z} - \left( {\omega_{{l_{2k} }} } \right)_{z} \left( {l_{2k} } \right)_{y} } \right)} \mathord{\left/ {\vphantom {{\left( {\left( {\omega_{{l_{2k} }} } \right)_{y} \left( {l_{2k} } \right)_{z} - \left( {\omega_{{l_{2k} }} } \right)_{z} \left( {l_{2k} } \right)_{y} } \right)} {\left| {\left( {l_{2k} } \right)_{y} } \right|^{2} }}} \right. \kern-0pt} {\left| {\left( {l_{2k} } \right)_{y} } \right|^{2} }}} & {{{\left( {\left( {\omega_{{l_{2k} }} } \right)_{y} \left( {l_{2k} } \right)_{z} - \left( {\omega_{{l_{2k} }} } \right)_{z} \left( {l_{2k} } \right)_{y} } \right)} \mathord{\left/ {\vphantom {{\left( {\left( {\omega_{{l_{2k} }} } \right)_{y} \left( {l_{2k} } \right)_{z} - \left( {\omega_{{l_{2k} }} } \right)_{z} \left( {l_{2k} } \right)_{y} } \right)} {\left| {\left( {l_{2k} } \right)_{z} } \right|^{2} }}} \right. \kern-0pt} {\left| {\left( {l_{2k} } \right)_{z} } \right|^{2} }}} \\ 0 & {{{\left( {\left( {\omega_{{l_{3k} }} } \right)_{y} \left( {l_{3k} } \right)_{z} - \left( {\omega_{{l_{3k} }} } \right)_{z} \left( {l_{3k} } \right)_{y} } \right)} \mathord{\left/ {\vphantom {{\left( {\left( {\omega_{{l_{3k} }} } \right)_{y} \left( {l_{3k} } \right)_{z} - \left( {\omega_{{l_{3k} }} } \right)_{z} \left( {l_{3k} } \right)_{y} } \right)} {\left| {\left( {l_{3k} } \right)_{y} } \right|^{2} }}} \right. \kern-0pt} {\left| {\left( {l_{3k} } \right)_{y} } \right|^{2} }}} & {{{\left( {\left( {\omega_{{l_{3k} }} } \right)_{y} \left( {l_{3k} } \right)_{z} - \left( {\omega_{{l_{3k} }} } \right)_{z} \left( {l_{3k} } \right)_{y} } \right)} \mathord{\left/ {\vphantom {{\left( {\left( {\omega_{{l_{3k} }} } \right)_{y} \left( {l_{3k} } \right)_{z} - \left( {\omega_{{l_{3k} }} } \right)_{z} \left( {l_{3k} } \right)_{y} } \right)} {\left| {\left( {l_{3k} } \right)_{z} } \right|^{2} }}} \right. \kern-0pt} {\left| {\left( {l_{3k} } \right)_{z} } \right|^{2} }}} \\ \end{array} } \right]$$
(18)

3.2 Forward Kinematics

The forward kinematics of the mechanism obtains the position, velocity, and acceleration of the TCP for a given set of position, velocity, and acceleration of the three active joints. The position forward kinematic of the mechanism can be obtained through equaling Eq. (6) with zero and numeric solution of the resulting equation. This, therefore, can be achieved by finding the roots for i = 1 to 3 for the following equation:

$$f_{i} \left( {\mathbf{T}} \right) = l_{ik}^{2} - \left( {\left( T \right)_{x} - \left( {F_{i} } \right)_{x} - \left( {q_{i} } \right)_{x} } \right)^{2} - \left( {\left( T \right)_{y} - \left( {F_{i} } \right)_{y} } \right)^{2} - \left( {\left( T \right)_{z} - \left( {F_{i} } \right)_{z} } \right)^{2} = 0$$
(19)

where \(\left\| {{\mathbf{l}}_{ik} } \right\|^{2} = l_{ik}\) and i = 1 to 3.

There are three equations with three unknown variables for \({\mathbf{T}} = \left[ {\begin{array}{*{20}c} {\left( T \right)_{x} } & {\left( T \right)_{y} } & {\left( T \right)_{z} } \\ \end{array} } \right]^{\text{T}}\) that can be solved numerically. Equation (19) has only one solution or no solution. This, however, is because the solution is obtained from the cross section between three spheres. The spheres are with similar radius but different center points. These three spheres could only cross each other in one point; otherwise, there will be no point. Furthermore, from the inverse kinematics formulation, the system does not have any redundancy of configurations for each workspace point. Hence, the mapping between the TCP position and the joint configuration is 1–1 if the point is in the robot workspace. Here, the fsolve() command of MATLAB software is used for this purpose with the acceptable error of 1 mm.

The velocity and acceleration forward kinematics of the mechanism can be expressed as:

$${\dot{\mathbf{T}}} = {\mathbf{J}}^{ - 1} {\dot{\mathbf{q}}}$$
(20)
$${\mathbf{\ddot{T}}} = {\mathbf{J}}^{ - 1} {\mathbf{\ddot{q}}} - {\mathbf{J}}^{ - 1} \left( {{{{\text{d}}{\mathbf{J}}} \mathord{\left/ {\vphantom {{{\text{d}}{\mathbf{J}}} {{\text{d}}t}}} \right. \kern-0pt} {{\text{d}}t}}} \right){\dot{\mathbf{T}}}$$
(21)

4 Workspace Analysis

In this section, the workspace analysis of the Gantry-Tau mechanism including the boundaries of the workspace, singularity, and dexterity analysis is addressed.

4.1 Joints’ Limitations

Passive links contribute to a low mass/inertia and therefore high speed, acceleration, and stiffness of the mechanism. These links impose mechanical and physical constraints on the mechanism. Here, the directional cosine angles between the links and x, y, and z axes are obtained to understand the mechanical constraints. These angles are employed to impose the physical limitations of the passive joints in workspace analysis.

There are two types of joints in the Gantry-Tau mechanism with different limitations (see Fig. 5). The first type is the spherical joints with three degrees-of-rotation movement between the link and support plate which is shown in Fig. 5a.

Fig. 5
figure 5

a The spherical joint between the link and support plate; b the spherical joint between the link and platform

\({\tilde{\mathbf{n}}}_{ik}\) is the unit vector normal to the cart supporting plane; this vector can be calculated by a rotation matrix with ± 45 degrees of rotation along the x axis and ± 60 degrees of rotation along the y axis using the CAD model of the mechanism, which gives: \({\mathbf{n}}_{1k} = \left[ {\begin{array}{*{20}c} {0.866} & { - 0.3536} & {0.3536} \\ \end{array} } \right]^{\text{T}}\), \({\mathbf{n}}_{2k} = \left[ {\begin{array}{*{20}c} {0.866} & {0.3536} & {0.3536} \\ \end{array} } \right]^{\text{T}}\), and \({\mathbf{n}}_{3k} = \left[ {\begin{array}{*{20}c} {0.866} & { - 0.3536} & { - 0.3536} \\ \end{array} } \right]^{\text{T}}\). Considering \({\mathbf{n}}_{ik}\) as the unit vector of kth link of the ith arm, the directional angles can be obtained as:

$$\alpha_{ik} = \cos \,\,^{ - 1} ({\tilde{\mathbf{n}}}_{ik} \cdot {\mathbf{n}}_{ik} )$$
(22)

The joint limitation of the spherical joints can be considered and applied as \(0 \le \alpha_{ik} \le 40^{ \circ }\).

A similar methodology has been used for the joints on the platform. Considering \(\beta_{ik}\) as the angle between the unit vector normal to the platform, at the joint of the kth link of the ith arm, and the unit vector along that link (Fig. 5b). A similar limitation can be assumed and applied to this angle, i.e., \(0 \le \beta_{ik} \le 40^{ \circ }\), and the unit vectors normal to the platform at the joint of the kth link of the ith arm are: \({\tilde{\mathbf{n}}}_{1k} = \left[ {\begin{array}{*{20}c} { - 0.866} & { - 0.3536} & {0.3536} \\ \end{array} } \right]^{\text{T}}\), \({\tilde{\mathbf{n}}}_{2k} = \left[ {\begin{array}{*{20}c} { - 0.866} & {0.3536} & {0.3536} \\ \end{array} } \right]^{\text{T}}\), and \({\tilde{\mathbf{n}}}_{3k} = \left[ {\begin{array}{*{20}c} { - 0.866} & { - 0.3536} & { - 0.3536} \\ \end{array} } \right]^{\text{T}}\).

4.2 Collisions

There are two types of collisions to consider: the collision of the platform with the guideways, and the collision of the links with the guideways. As the motion of the platform is just translational, any collision between links of one arm, or with different arms will not happen here in Gantry-Tau mechanism.

Considering all the links and guideways as cylindrical parts, and \({\mathbf{u}}_{B}\) and \({\mathbf{v}}_{B}\) as the point to the endpoints of each body’s centerline, all the centerline positions of each body, \({\mathbf{c}}_{B}\), can be described as (Pedrammehr et al. 2018a):

$${\mathbf{c}}_{B} = {\mathbf{u}}_{B} + S_{B} ({\mathbf{v}}_{B} - {\mathbf{u}}_{B} )$$
(23)

where \(0 \le S_{B} \le 1\) and B denotes a symbol for the cylindrical body.

The vector between two parts \(B\) and \(\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B}\) centerlines is named \({\mathbf{d}}_{{B\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }}\) and can be expressed as:

$${\mathbf{d}}_{{B\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} = {\mathbf{c}}_{B} - {\mathbf{c}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} = {\mathbf{u}}_{B} - {\mathbf{u}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} + S_{B} ({\mathbf{v}}_{B} - {\mathbf{u}}_{B} ) - S_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} ({\mathbf{v}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} - {\mathbf{u}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} )$$
(24)

where \(S_{B}\) and \(S_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }}\) are unknown parameters.

Considering \({\mathbf{a}} = {\mathbf{u}}_{B} - {\mathbf{u}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }}\), \({\mathbf{b}}_{B} = {\mathbf{v}}_{B} - {\mathbf{u}}_{B}\), and \({\mathbf{b}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} = {\mathbf{v}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} - {\mathbf{u}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }}\), the minimum of \({\mathbf{d}}_{{B\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }}\) is obtained by taking the derivative on the both sides of Eq. (24) with respect to \(S_{B}\) and \(S_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }}\), and equaling the resultant equation with 0 which gives a two-equations system, as:

$$S_{B} = {{\left( {\left( {{\mathbf{a}}^{\text{T}} {\mathbf{b}}_{B} } \right)\left( {{\mathbf{b}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }}^{\text{T}} {\mathbf{b}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} } \right) - \left( {{\mathbf{a}}^{\text{T}} {\mathbf{b}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} } \right)\left( {{\mathbf{b}}_{B}^{\text{T}} {\mathbf{b}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} } \right)} \right)} \mathord{\left/ {\vphantom {{\left( {\left( {{\mathbf{a}}^{\text{T}} {\mathbf{b}}_{B} } \right)\left( {{\mathbf{b}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }}^{\text{T}} {\mathbf{b}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} } \right) - \left( {{\mathbf{a}}^{\text{T}} {\mathbf{b}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} } \right)\left( {{\mathbf{b}}_{B}^{\text{T}} {\mathbf{b}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} } \right)} \right)} {{\mathbf{b}}_{B}^{\text{T}} {\mathbf{b}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} \left( {{\mathbf{b}}_{B}^{\text{T}} {\mathbf{b}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} - {\mathbf{b}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }}^{\text{T}} {\mathbf{b}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} } \right)}}} \right. \kern-0pt} {{\mathbf{b}}_{B}^{\text{T}} {\mathbf{b}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} \left( {{\mathbf{b}}_{B}^{\text{T}} {\mathbf{b}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} - {\mathbf{b}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }}^{\text{T}} {\mathbf{b}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} } \right)}}$$
(25)
$$S_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} = {{\left( {\left( {{\mathbf{a}}^{\text{T}} {\mathbf{b}}_{B} } \right)\left( {{\mathbf{b}}_{B}^{\text{T}} {\mathbf{b}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} } \right) - \left( {{\mathbf{a}}^{\text{T}} {\mathbf{b}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} } \right)\left( {{\mathbf{b}}_{B}^{\text{T}} {\mathbf{b}}_{B} } \right)} \right)} \mathord{\left/ {\vphantom {{\left( {\left( {{\mathbf{a}}^{\text{T}} {\mathbf{b}}_{B} } \right)\left( {{\mathbf{b}}_{B}^{\text{T}} {\mathbf{b}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} } \right) - \left( {{\mathbf{a}}^{\text{T}} {\mathbf{b}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} } \right)\left( {{\mathbf{b}}_{B}^{\text{T}} {\mathbf{b}}_{B} } \right)} \right)} {\left( {{\mathbf{b}}_{B}^{\text{T}} {\mathbf{b}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} \left( {{\mathbf{b}}_{B}^{\text{T}} {\mathbf{b}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} - {\mathbf{b}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }}^{\text{T}} {\mathbf{b}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} } \right)} \right)}}} \right. \kern-0pt} {\left( {{\mathbf{b}}_{B}^{\text{T}} {\mathbf{b}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} \left( {{\mathbf{b}}_{B}^{\text{T}} {\mathbf{b}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} - {\mathbf{b}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }}^{\text{T}} {\mathbf{b}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} } \right)} \right)}}$$
(26)

By considering \({\mathbf{r}}_{B}\) and \({\mathbf{r}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }}\) for the radius of the two bodies, if \({\mathbf{d}}_{{B\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }} > {\mathbf{r}}_{B} + {\mathbf{r}}_{{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\frown}$}}{B} }}\) then there would not be a collision between the bodies and the considered point will be in the borders of the workspace. It is of note that the condition must be verified for both the cases to ensure there is no collision in the system.

4.3 Singularity and Dexterity

If the inverse Jacobian matrix’s determinant is equal to zero, the mechanism will be at a singular point. In this condition, the mechanism gets an extra DOF and is not controllable. In addition, when the determinant of the Jacobian matrix of the forward kinematics becomes zero, the mechanism will face other possible singularities which decrease the manipulator DOFs. It should be noted that in some configurations, the determinants of both the Jacobians may be 0. This condition is a synthetic singularity that is discussed as having mechanism motion in the condition with no actuating forces, or the condition of having the actuation forces without any motion of the end effector (Cheng et al. 2016). In this study, the inverse Jacobian matrix known as Jq is a diagonal matrix and its determinant is the product of the elements of Jq. Therefore, the proposed mechanism will not have the inverse singular points, and only the forward singularity points are concerned. Here, it has been assumed when JT becomes under 0.001, the point is a singular point and is not considered within the manipulator workspace.

Moreover, the robot dexterity is investigated. There are several measures for the dexterity of the robotic manipulators; this includes a manipulability measure and the condition number. The manipulability of a robotic manipulator is defined by (Merlet 2006):

$$\rho = {1 \mathord{\left/ {\vphantom {1 {\left\| {\mathbf{J}} \right\|}}} \right. \kern-0pt} {\left\| {\mathbf{J}} \right\|}}\left\| {{\mathbf{J}}^{ - 1} } \right\|$$
(27)

where \(\rho\) represents the dexterity, and the norm of J is defined as:

$$\left\| {\mathbf{J}} \right\| = \sqrt {trace((1/2){\mathbf{JJ}}^{\text{T}} )}$$
(28)

It is easier to control the mechanism in the regions that offer a good level of manipulability. The manipulability value is closely related to the robot kinematics dimensions and joint configuration. For the dexterity analysis that is performed in this paper, these values are normalized with respect to their maximum value. It is of note that a manipulability value close to zero is equivalent to the singularity at that point.

4.4 Workspace and Dexterity

To demonstrate the manipulator workspace, a simulation is carried out for a Gantry-Tau mechanism with the specifications given in the “Appendix.” To this end, the formulation has been implemented in an m.file developed in MATLAB environment for the workspace of the Gantry-Tau manipulator. This program has three loops, due to the existence of three DOF of the Gantry-Tau manipulators which provides x-, y-, and z-directional motions, and examines all the workspace points considering the mentioned limits. Having defined a cube of points, the workspace will be at hand after elimination of the points that are not within the borders of the workspace. Figure 6 shows the results obtained by workspace simulation for the Gantry-Tau manipulator.

Fig. 6
figure 6

The workspace of the mechanism with the dexterity value between a 0 and 1; b 0.25 and 1; c 0.5 and 1; d 0.75 and 1

The joint and links configurations are overlaid on the figure for better understanding of the workspace. Furthermore, the normalized dexterity of the mechanism has been considered for all the workspace points. Figure 6a shows the whole workspace with the dexterity range between 0 and 1. Manipulators are mostly required to work in the regions with higher dexterity. Therefore, the parts of the workspace with 0.25 to 1, 0.5 to 1, and 0.75 to 1 dexterities are, respectively, illustrated in Fig. 6b–d. It is obvious that the size of the workspace with higher dexterity values is less than its size with lower dexterity limit.

Due to the importance of the dexterity measure for the points in the workspace, the level of dexterity values for the different cross sections of the workspace in x direction is shown in Fig. 7, the contours for the dexterity values are shown on the bottom of the related plane, and the different colors of the contours are described for the dexterity values via the legend next to each plot. Similar analysis has been performed for the dexterity values in the various cross sections of the workspace in y and z directions. The results are illustrated in Figs. 8 and 9 for of the cross section planes in y and z axes.

Fig. 7
figure 7

Dexterity for the different cross sections of the workspace in: a x = 2000; b x = 2500; c x = 3500; d x = 4500; e x = 4900; all in mm

Fig. 8
figure 8

Dexterity for the different cross sections of the workspace in: a y = − 800; b y = − 600; c y = − 400; d y = − 200; e y = 0; f y = 200; g y = 400; h y = 600; all in mm

Fig. 9
figure 9

Dexterity for the different cross sections of the workspace in: a z = − 600; b z = − 400; c z = − 200; d z = 0; e z = 200; f z = 400; all in mm

5 Error Analysis

The kinematic error modeling of the Gantry-Tau mechanism is essential for its calibration. The error model can also be used to determine the maximum error region of the workspace, and the parameters that have a dominant effect on the error can be studied. There are various error sources that cause inaccuracy in the kinematic model, which can be attributed to the measuring device, the environmental and measuring conditions, manufacturing and assembling of the parts, or computing and geometrical errors. Several research works have been reported in the literature which focuses on the error modeling and calibration of the different parallel manipulators. All the error causes cannot be modeled; however, some of the systematic error elements can be simulated and then addressed in the calibration of the mechanism (Greenway 2000; Visinsky et al. 1994).

The error model is a mathematical formulation that relates the \(\delta {\mathbf{T}}\) to the effective parameters of the model. The effective parameters in this kinematics model include the joints center errors, \(\delta {\mathbf{d}}_{ik} ,\,\,\delta {\mathbf{c}}_{ik}\), the cart position error, \(\delta {\mathbf{a}}_{i}^{s}\), and the linear displacement error, \(\delta {\mathbf{q}}_{i}\). The source of these errors could be manufacturing and measurement or thermal and mechanical deformations. Accordingly, the error model is obtained by perturbation of Eqs. (1)–(4), which gives:

$$\delta {\mathbf{T}} = \delta \left( {{\mathbf{a}}_{i}^{s} + {\mathbf{d}}_{ik} + {\mathbf{c}}_{ik} } \right) + \delta {\mathbf{q}}_{i} + \delta {\mathbf{l}}_{ik}$$
(29)

Considering \({\mathbf{q}}_{i} \cdot {\hat{\mathbf{i}}} = \left( {q_{i} } \right)_{x}\), and taking the inner product of the two sides of Eq. (29) with \({\hat{\mathbf{i}}} = \left[ {\begin{array}{*{20}c} 1 & 0 & 0 \\ \end{array} } \right]^{\text{T}}\), gives:

$$\delta {\mathbf{q}}_{i} \cdot {\hat{\mathbf{i}}} = \delta {\mathbf{T}} \cdot {\hat{\mathbf{i}}} - \left( {\delta {\varvec{\upomega}}_{{L_{ik} }} \times {\mathbf{l}}_{ik} } \right) \cdot {\hat{\mathbf{i}}} - \delta {\mathbf{a}}_{i}^{s} \cdot {\hat{\mathbf{i}}} + \delta {\mathbf{d}}_{ik} \cdot {\hat{\mathbf{i}}} + \delta {\mathbf{c}}_{ik} \cdot {\hat{\mathbf{i}}}$$
(30)

Considering \({\mathbf{q}}_{i} = {\mathbf{q}}_{oi} + \Delta {\mathbf{q}}_{i}\) with \(\Delta {\mathbf{q}}_{i}\) and \({\mathbf{q}}_{oi}\), respectively, as the joint displacement and the constant offset of the ith joint displacement, and with \(\delta {\mathbf{q}}_{i} \cdot {\hat{\mathbf{i}}}\) as the displacement error, Eq. (29) can be rewritten as:

$$\delta \left( {\Delta {\mathbf{q}}_{i} } \right) \cdot {\hat{\mathbf{i}}} + \left( {\delta {\mathbf{q}}_{oi} } \right) \cdot {\hat{\mathbf{i}}} = {\mathbf{J}}(i,:)\delta {\mathbf{T}} - \delta {\mathbf{a}}_{i}^{s} \cdot {\hat{\mathbf{i}}} + \delta {\mathbf{d}}_{ik} \cdot {\hat{\mathbf{i}}} + \delta {\mathbf{c}}_{ik} \cdot {\hat{\mathbf{i}}}$$
(31)

Equation (30) can be expressed in a matrix form as:

$$\begin{aligned} \left[ {\begin{array}{*{20}c} {\delta \left( {\Delta q_{1} } \right)_{x} } \\ {\delta \left( {\Delta q_{2} } \right)_{x} } \\ {\delta \left( {\Delta q_{3} } \right)_{x} } \\ \end{array} } \right] & = \left[ {\begin{array}{*{20}c} 1 & {{{\left( {l_{1k} } \right)_{y} } \mathord{\left/ {\vphantom {{\left( {l_{1k} } \right)_{y} } {\left( {l_{1k} } \right)_{x} }}} \right. \kern-0pt} {\left( {l_{1k} } \right)_{x} }}} & {{{\left( {l_{1k} } \right)_{z} } \mathord{\left/ {\vphantom {{\left( {l_{1k} } \right)_{z} } {\left( {l_{1k} } \right)_{x} }}} \right. \kern-0pt} {\left( {l_{1k} } \right)_{x} }}} \\ 1 & {{{\left( {l_{2k} } \right)_{y} } \mathord{\left/ {\vphantom {{\left( {l_{2k} } \right)_{y} } {\left( {l_{2k} } \right)_{x} }}} \right. \kern-0pt} {\left( {l_{2k} } \right)_{x} }}} & {{{\left( {l_{2k} } \right)_{z} } \mathord{\left/ {\vphantom {{\left( {l_{2k} } \right)_{z} } {\left( {l_{2k} } \right)_{x} }}} \right. \kern-0pt} {\left( {l_{2k} } \right)_{x} }}} \\ 1 & {{{\left( {l_{3k} } \right)_{y} } \mathord{\left/ {\vphantom {{\left( {l_{3k} } \right)_{y} } {\left( {l_{3k} } \right)_{x} }}} \right. \kern-0pt} {\left( {l_{3k} } \right)_{x} }}} & {{{\left( {l_{3k} } \right)_{z} } \mathord{\left/ {\vphantom {{\left( {l_{3k} } \right)_{z} } {\left( {l_{3k} } \right)_{x} }}} \right. \kern-0pt} {\left( {l_{3k} } \right)_{x} }}} \\ \end{array} } \right]\left[ {\begin{array}{*{20}c} {\left( {\delta T} \right)_{x} } \\ {\left( {\delta T} \right)_{y} } \\ {\left( {\delta T} \right)_{z} } \\ \end{array} } \right] \\ & \quad + \left[ {\begin{array}{*{20}c} {{\mathbf{J}}_{\rho 1} } & {{\mathbf{0}}_{1 \times 4} } & {{\mathbf{0}}_{1 \times 4} } \\ {{\mathbf{0}}_{1 \times 4} } & {{\mathbf{J}}_{\rho 2} } & {{\mathbf{0}}_{1 \times 4} } \\ {{\mathbf{0}}_{1 \times 4} } & {{\mathbf{0}}_{1 \times 4} } & {{\mathbf{J}}_{\rho 3} } \\ \end{array} } \right]\delta {\varvec{\uprho}} \\ \end{aligned}$$
(32)

in which

$$\delta {\varvec{\uprho}} = \left[ {\begin{array}{*{20}c} {\left( {\delta a_{1}^{s} } \right)_{x} } & {\left( {\delta d_{1} } \right)_{x} } & {\left( {\delta c_{1} } \right)_{x} } & {\delta q_{o1} } & {\left( {\delta a_{2}^{s} } \right)_{x} } & {\left( {\delta d_{2} } \right)_{x} } & {\left( {\delta c_{2} } \right)_{x} } & {\delta q_{o2} } & {\left( {\delta a_{3}^{s} } \right)_{x} } & {\left( {\delta d_{3} } \right)_{x} } & {\left( {\delta c_{3} } \right)_{x} } & {\delta q_{o3} } \\ \end{array} } \right]^{\text{T}}$$
(33)

and \({\mathbf{J}}_{\rho i} = \left[ {\begin{array}{*{20}c} { - 1} & 1 & 1 & { - 1} \\ \end{array} } \right]\) is referred as the diagnostic Jacobian matrix of the ith arm.

Equation (32) can be rewritten in a closed form as:

$$\left[ {\delta \left( {\Delta q_{i} } \right)_{x} } \right]_{3 \times 1} = {\mathbf{J}}_{\,} \delta {\mathbf{T}} + {\mathbf{J}}_{\rho } \,\delta {\varvec{\uprho}}$$
(34)

where J is the Jacobian matrix. \(\left[ {\delta (\Delta q_{i} )_{x} } \right]_{3 \times 1}\) is the vector of linear displacement error of the carts, \(\delta {\mathbf{T}}\) is position error, and \(\delta {\varvec{\uprho}}\) is error vector of kinematic parameters.

Equation (34) is known as the inverse error model of the robot. Accordingly, the direct error model is obtained by:

$$\delta {\mathbf{T}} = {\mathbf{J}}^{ - 1} \left( {\left[ {\delta \left( {\Delta q_{i} } \right)_{x} } \right]_{3 \times 1} - {\mathbf{J}}_{\rho } \,\delta {\varvec{\uprho}}} \right)$$
(35)

To analyze the positioning error in a point within the workspace, the end-effector platform is first positioned at its reference point, i.e., x = 3500 mm, y = 0 mm, and z = 0 mm; then, 200 different series of error scenarios have been randomly produced with uniform distribution between [− 1 mm, + 1 mm]. These error scenarios, moreover, are added to the different parameters of the mechanism. The position error values for the 200 error scenarios are shown in Fig. 10. The mean and standard deviations of the position error for this analysis are, respectively, obtained as MEAN = 2.4726 mm and STD = 1.2901 mm.

Fig. 10
figure 10

The position error value of 200 error scenarios for the initial end-effector position

The next stage for the error analysis is to obtain the error through the workspace. For this purpose, we move the previous test point along the y axis from x = 3500 mm, y = − 800 mm, z = 0 mm to x = 3500 mm, y = + 800 mm, z = 0 mm, with the step size of dy = 50 mm. Then for each step, the position error values for 6 different error scenarios are obtained and shown in Table 1. According to Table 1, the position vector, a, has the most significant effect on the kinematics error of the mechanism. This will be considered in Eqs. (36) and (37) to reduce the error after calibration. The position error for this end-effector positioning in the y direction is shown in Fig. 11 which contains the error for each scenario, and the mean of the obtained errors for the six scenarios in each step of the movement.

Table 1 The error scenarios of the different kinematic parameters
Fig. 11
figure 11

The position error for the selected scenarios and the average error of the end effector: a y-directional motion; b x-directional motion; c z-directional motion

Figure 11 represents the fact that in x = 3500 mm and z = 0 mm planes error along positive side of y axis has the higher value rather than the other region of the workspace. Furthermore, the center of workspace in y = 0 mm plane has the most sensitivity to the error of the kinematics parameter. Thus, in discussing the calibration of the Gantry-Tau mechanism, most of the chosen positions must be from this part of the workspace. Such a selection of the test points guarantees the calibration for the whole workspace. Similar analysis has been performed for the motion of the end-effector platform position along the x and z axes, and the corresponding results are, respectively, shown in Fig. 11b, c.

Furthermore, a set of two-dimensional motions throughout the workspace has been implemented and the error analysis has been performed for the grid of points in yz, xz, and xy planes. In this analysis, the error scenario 4 of Table 1 has been applied to the mechanism. The fourth error scenario is selected for these analyses, as this scenario produced the maximum error among the other scenarios. The results of these analyses are shown in Fig. 12.

Fig. 12
figure 12

Two-dimensional motion error of the mechanism in: a yz plane with x = 3500 mm; b xz plane with y = 0; c xy plane with z = 0

6 Calibration Design

The purpose of kinematic calibration is to increase the kinematic accuracy of the manipulator through optimization of model parameters and cancelation of the systematic errors.

6.1 Calibration Methodology

There are several methods of kinematic calibration for robots, some of which are preferred for parallel robots. Furthermore, the requirements for the calibration system of parallel robots are somehow different from those for serial robots due to workspace conditions (Merlet 2001). Within the literature, the calibration of parallel robots can be performed based on external measurement systems, the constrained method, or through self-calibration, with the external calibration as the main method for that. There are mechanical measurement systems (Tavolieri et al. 2006; Huang et al. 2006) and optic systems (Renaud et al. 2006; Motta et al. 2001) for such applications. In the self-calibration method, the calibration is performed by the mechanism using some redundant sensors located on the joints or other components of the robot. However, in the constrained calibration method, the motion of some of the links are mechanically fixed or constrained to reduce the degrees of freedom of the robot (Daney 1999).

The Gantry-Tau manipulator does not have any built-in redundant sensors for the self-calibration, and it is difficult to immobilize the joints of the robot for constrained calibration. Hence, external measurement is the remaining option. However, the implementation of such calibration is costly, and difficult due to the requirement of precise measurement and the high expense of measuring equipment. Furthermore, it is time-consuming, as it requires numerous measurements, where the number of measurements depends on the number of parameters of the kinematic model that need to be calibrated and the required quality level of the calibration. These specifications of the real calibration make the evaluation between different calibration methods difficult and very time-consuming. Here, in this study, a fast and low-cost tool for evaluation of a calibration method is presented using a SimMechanics model of the Gantry-Tau mechanism. It is also observed that there is not any research work which uses a SimMechanics model for the calibration purposes which is a motivation of this paper.

The calibration methodology is as follows:

  1. 1.

    First, several joint configurations are selected for calibration design; these points are mostly selected from a region with a high level of error.

  2. 2.

    The joint positions are then applied to the SimMechanics model, and the position of the end-effector platform is obtained from this model for each of the selected joint positions.

  3. 3.

    The position error of the platform is obtained for each selected configuration using parametric model.

  4. 4.

    This error is then used to build a cost function for optimization; here, the mean square of the position error values (MSE) is used which is obtained by:

    $$\left( {{1 \mathord{\left/ {\vphantom {1 M}} \right. \kern-0pt} M}} \right)\sum\limits_{m = 1}^{M} {\sum\limits_{j = 1}^{3} {\sum\limits_{k = 1}^{N} {\left( {\left\| {{\mathbf{a}}_{j}^{s} + q_{jm} ({\mathbf{v}}) - {\mathbf{T}}_{m} } \right\|^{2} - l_{jk}^{2} } \right)^{2} } } }$$
    (36)

    In cost functions of Eqs. (36) and (37), the first Σ has been considered for all the selected points (M points), the second Σ has been considered for the three arms of the Gantry-Tau, and the last Σ has been considered for the number of links in one arm (N = 1 is for arm 1, N = 2 is for arm 2, and N = 3 is for arm 3). Also, v is the corresponding unit vector for the active joints with \(q_{jm}\) length in the three directions (x, y, and z). In addition, the other designing parameters such as d and c are omitted because we want to reduce the calibrating parameters of the robot through the simplicity and practicality.

  5. 5.

    The final stage of the calibration is obtained from the minimization of the cost function.

6.2 Calibration Evaluation

As a part of an evaluation of this calibration methodology, a MATLAB code has been developed and 200 initial positions have been used. Then, the optimization has been performed and the optimal robot kinematics parameters are obtained as listed in Table 2. The position error value for the selected 200 positions before and after calibration is shown in Fig. 13 with an approximate error reduction of 68.64%.

Table 2 The kinematic parameters before and after calibration based on the minimization of MSE
Fig. 13
figure 13

The position error before and after the calibration process, based on minimization of MSE

As it was explained earlier, the main benefit of the proposed SimMechanics model for calibration is the possibility of benchmarking and evaluation between different calibration methods. Here, the second calibration method is considered which is obtained with the cost function based on the mean absolute error values (MAE), which is obtained by:

$$\left( {{1 \mathord{\left/ {\vphantom {1 M}} \right. \kern-0pt} M}} \right)\sum\limits_{m = 1}^{M} {\sum\limits_{j = 1}^{3} {\sum\limits_{k = 1}^{N} {\left| {\left\| {{\mathbf{a}}_{j}^{s} + q_{jm} ({\mathbf{v}}) - {\mathbf{T}}_{m} } \right\|^{2} - l_{jk}^{2} } \right|} } }$$
(37)

The results of this calibration are obtained and listed in Table 3.

Table 3 The kinematic parameters before and after calibration based on the minimization of MAE

The position error value for the selected 200 positions before and after calibration based on minimization of MAE is shown in Fig. 14, with an approximate 69.54% reduction in the error.

Fig. 14
figure 14

The position error before and after the calibration process, based on minimization of MAE

7 Conclusion

This study investigated the kinematics, workspace analysis, and calibration for a Gantry-Tau mechanism. A workspace and dexterity analyses were performed, and the region of the workspace with high level of dexterity was determined. A mathematical model of the systematic error in the kinematics model of the robot was obtained. Error analysis was performed to identify the parameters that affect the robot position error. Minimization of the error was then employed for the calibration of kinematics parameters, and the calibration of the mechanism was performed over a large number of sampled robot positions. The results demonstrated that after the calibration, the position error of the model was reduced significantly. The use of a CAD and SimMechanics model for performance evaluation of the mechanism calibration allowed us to quickly and effectively evaluate the performance of two calibration methods.