<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v2.3 20070202//EN" "journalpublishing.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xml:lang="en" article-type="research-article">
<front>
<journal-meta>
<journal-id journal-id-type="nlm-ta">Sensors</journal-id>
<journal-title>Sensors</journal-title>
<issn pub-type="epub">1424-8220</issn>
<publisher>
<publisher-name>Molecular Diversity Preservation International (MDPI)</publisher-name></publisher></journal-meta>
<article-meta>
<article-id pub-id-type="doi">10.3390/s110404335</article-id>
<article-id pub-id-type="publisher-id">sensors-11-04335</article-id>
<article-categories>
<subj-group>
<subject>Article</subject></subj-group></article-categories>
<title-group>
<article-title>Fused Smart Sensor Network for Multi-Axis Forward Kinematics Estimation in Industrial Robots</article-title></title-group>
<contrib-group>
<contrib contrib-type="author">
<name><surname>Rodriguez-Donate</surname><given-names>Carlos</given-names></name></contrib>
<contrib contrib-type="author">
<name><surname>Osornio-Rios</surname><given-names>Roque Alfredo</given-names></name><xref ref-type="corresp" rid="c1-sensors-11-04335"><sup>*</sup></xref></contrib>
<contrib contrib-type="author">
<name><surname>Rivera-Guillen</surname><given-names>Jesus Rooney</given-names></name></contrib>
<contrib contrib-type="author">
<name><surname>de Jesus Romero-Troncoso</surname><given-names>Rene</given-names></name></contrib>
<aff id="af1-sensors-11-04335">HSPdigital-CA Mecatronica, Facultad de Ingenieria, Universidad Autonoma de Queretaro, Campus San Juan del Rio, Rio Moctezuma 249, 76807 San Juan del Rio, Qro., Mexico; E-Mails: <email>cdonate@hspdigital.org</email> (C.R.-D.); <email>jrivera@hspdigital.org</email> (J.R.R.-G.); <email>troncoso@hspdigital.org</email> (R.J.R.-T.)</aff></contrib-group>
<author-notes>
<corresp id="c1-sensors-11-04335">
<label>*</label> Author to whom correspondence should be addressed; E-Mail: <email>raosornio@hspdigital.org</email>; Tel.: +52-427-274-1244; Fax: +52-427-274-1244.</corresp></author-notes>
<pub-date pub-type="collection">
<year>2011</year></pub-date>
<pub-date pub-type="epub">
<day>13</day>
<month>4</month>
<year>2011</year></pub-date>
<volume>11</volume>
<issue>4</issue>
<fpage>4335</fpage>
<lpage>4357</lpage>
<history>
<date date-type="received">
<day>9</day>
<month>3</month>
<year>2011</year></date>
<date date-type="rev-recd">
<day>8</day>
<month>4</month>
<year>2011</year></date>
<date date-type="accepted">
<day>12</day>
<month>4</month>
<year>2011</year></date></history>
<permissions>
<copyright-statement>© 2011 by the authors; licensee MDPI, Basel, Switzerland.</copyright-statement>
<copyright-year>2011</copyright-year>
<license>
<p>This article is an open access article distributed under the terms and conditions of the Creative Commons Attribution license (http://creativecommons.org/licenses/by/3.0/).</p></license></permissions>
<abstract>
<p>Flexible manipulator robots have a wide industrial application. Robot performance requires sensing its position and orientation adequately, known as forward kinematics. Commercially available, motion controllers use high-resolution optical encoders to sense the position of each joint which cannot detect some mechanical deformations that decrease the accuracy of the robot position and orientation. To overcome those problems, several sensor fusion methods have been proposed but at expenses of high-computational load, which avoids the online measurement of the joint’s angular position and the online forward kinematics estimation. The contribution of this work is to propose a fused smart sensor network to estimate the forward kinematics of an industrial robot. The developed smart processor uses Kalman filters to filter and to fuse the information of the sensor network. Two primary sensors are used: an optical encoder, and a 3-axis accelerometer. In order to obtain the position and orientation of each joint online a field-programmable gate array (FPGA) is used in the hardware implementation taking advantage of the parallel computation capabilities and reconfigurability of this device. With the aim of evaluating the smart sensor network performance, three real-operation-oriented paths are executed and monitored in a 6-degree of freedom robot.</p></abstract>
<kwd-group>
<kwd>forward kinematics</kwd>
<kwd>sensor network</kwd>
<kwd>sensor fusion</kwd>
<kwd>FPGA</kwd>
<kwd>industrial robot</kwd></kwd-group></article-meta></front>
<body>
<sec sec-type="intro">
<label>1.</label>
<title>Introduction</title>
<p>Flexible manipulator robots have wide industrial applications, with handling and manufacturing operations being some of the most common [<xref ref-type="bibr" rid="b1-sensors-11-04335">1</xref>–<xref ref-type="bibr" rid="b3-sensors-11-04335">3</xref>]. High-precision and high-accuracy in robot operations require the study of robot kinematics, dynamics and control [<xref ref-type="bibr" rid="b4-sensors-11-04335">4</xref>]. The aim of forward kinematics is to compute the position and orientation of the robot end effector as a function of the angular position of each joint [<xref ref-type="bibr" rid="b1-sensors-11-04335">1</xref>]. The online estimation of the forward kinematics can contribute to improve the controller performance by considering the joints’ motion collectively. Therefore, the precision and accuracy of such information is essential to the controller in order to increase its performance in real robotic operations.</p>
<p>Commercially available motion controllers use a single sensor for each joint to estimate the robot’s angular position; the most common sensor is the optical encoder [<xref ref-type="bibr" rid="b5-sensors-11-04335">5</xref>–<xref ref-type="bibr" rid="b11-sensors-11-04335">11</xref>], which provides a high-resolution feedback to the controller. However, it only gives information on the servomotor position and any deformations caused by joint flexibilities cannot be monitored [<xref ref-type="bibr" rid="b6-sensors-11-04335">6</xref>,<xref ref-type="bibr" rid="b12-sensors-11-04335">12</xref>], decreasing the robot’s accuracy. This problem is more evident in open-chain robots. Moreover, the provided information is relative, which means that it is impossible to estimate the initial position of the robot. Another sensor that is widely used in the estimation of the angular position of the robot joints is the gyroscope; it provides a measurement of angular rate of change, requiring the accumulated sum over time to estimate the angular position. Despite the fact that they can detect some nonlinearities that cannot be estimated with encoders, the quantized, noisy signal causes accumulated errors when angular position is required [<xref ref-type="bibr" rid="b13-sensors-11-04335">13</xref>–<xref ref-type="bibr" rid="b15-sensors-11-04335">15</xref>]. Furthermore, the estimated angular position is relative, which does not permit one to know the initial angular position of the robot joints. A good sensor that provides an absolute measurement is the accelerometer and it can be used to estimate the robot angular position [<xref ref-type="bibr" rid="b5-sensors-11-04335">5</xref>,<xref ref-type="bibr" rid="b16-sensors-11-04335">16</xref>–<xref ref-type="bibr" rid="b20-sensors-11-04335">20</xref>]. Nevertheless, the signal obtained is noisy and contains much information that needs preprocessing before being used [<xref ref-type="bibr" rid="b21-sensors-11-04335">21</xref>].</p>
<p>Two main issues need to be solved when the robot forward kinematics is required: the problems of using a single sensor to estimate the angular position of the joints and the online estimation of the forward kinematics. In this perspective, sensor fusion techniques improve the accuracy of the monitored variables, but at the expense of high-computational loads [<xref ref-type="bibr" rid="b22-sensors-11-04335">22</xref>], which complicate the online estimation of the forward kinematics. Some works combine sensor fusion techniques and forward kinematics estimation. For example, in [<xref ref-type="bibr" rid="b7-sensors-11-04335">7</xref>] accelerometer and encoder signals are fused using a disturbance observer to compensate some nonlinearities and a reset state estimator for position estimation; experimentation is performed on a linear motor positioning system, which requires no forward kinematics estimation. Another work that fuses encoder and accelerometer signals is presented in [<xref ref-type="bibr" rid="b16-sensors-11-04335">16</xref>], where the forward kinematics of two links in a 6-DOF robot is calculated; different versions of an extended Kalman filter are used for sensor fusion. However, the efficacy of the proposed algorithm is demonstrated offline. Other works attempt to fuse more than two different sensors. In [<xref ref-type="bibr" rid="b12-sensors-11-04335">12</xref>] the fusion of encoder, accelerometer and interferometer through a Kalman filter is presented to estimate the position of a parallel kinematic machine, but the analysis is limited to one-axis movement. In [<xref ref-type="bibr" rid="b6-sensors-11-04335">6</xref>] camera, accelerometer and gyroscope sensors are combined through a kinematic Kalman filter for position estimation of a planar two-link robot to facilitate the forward kinematics estimation. In [<xref ref-type="bibr" rid="b23-sensors-11-04335">23</xref>,<xref ref-type="bibr" rid="b24-sensors-11-04335">24</xref>] a hardware-software architecture for sensor network fusion in industrial robots is proposed. Multiple PCs to process all the data collected from the sensors and to control the robot are used. However, they use the sensor fusion to estimate the robot contact force and the forward kinematics are estimated only from the encoder signals.</p>
<p>Reported works note the limitations of using a single sensor to estimate robots’ forward kinematics. Besides, forward kinematics is limited to a couple of joints due to the equations’ complexity. Therefore, the online forward kinematics estimation problem for multi-axis robots still requires additional efforts. Due to this, a dedicated processor capable of filtering and fusing the information of several sensors would be desirable. Also, multi-axis forward kinematics estimation in an online fashion would be advantageous.</p>
<p>The contribution of this work is performed of two stages: the improvement of the sensing method of conventional motion controllers through proposal of an encoder-accelerometer-based fused smart sensor network. Furthermore, we propose a smart processor capable of processing all the sensed encoder-accelerometer signals so as to obtain online forward kinematics estimation of each joint of a six-degree-of-freedom (6-DOF) industrial robot. The smart processor is designed using field-programmable gate arrays (FPGA) owing to their parallel computation capabilities and reconfigurability. It is designed through the combination of several methods and techniques to achieve online operation. The smart processor is able to filter and to fuse the information of the sensor network, which contains two primary sensors: an optical encoder, and a 3-axis accelerometer; and then to obtain the robot forward kinematics for each joint in an online fashion. The sensor network is composed of six encoders and four 3-axis accelerometers mounted on the robot. An experimental setup was carried out on a 6-DOF PUMA (Programmable Universal Manipulation Arm) robot, demonstrating the performance of the proposed fused smart sensor network through the monitoring of three real-operation-oriented 3D trajectories. Moreover, additional experiments were carried out whereby the forward kinematics obtained with the proposed methodology is compared against the obtained through the conventional method of using encoders. An improvement in the measurement accuracy is found when the proposed methodology is used.</p></sec>
<sec sec-type="methods">
<label>2.</label>
<title>Methodology</title>
<p>The use of accelerometers on 6-DOF PUMA robots requires placing them adequately in specific positions. The combination of accelerometers and encoders make up the sensor network that needs to be processed in order to estimate the angular position of each joint and the forward kinematics accurately. In this section, the placement of the sensor network on the PUMA robot is presented. Then, the FPGA-based forward kinematics smart processor is clearly described.</p>
<sec>
<label>2.1.</label>
<title>Sensor Network</title>
<p>A sensor network is an array of diverse types of sensors to monitor several variables [<xref ref-type="bibr" rid="b25-sensors-11-04335">25</xref>,<xref ref-type="bibr" rid="b26-sensors-11-04335">26</xref>]; in this case the angular position of the joint flexibilities of the robot. The sensor network arranged on the robot is presented in <xref ref-type="fig" rid="f1-sensors-11-04335">Figure 1</xref>. <xref ref-type="fig" rid="f1-sensors-11-04335">Figure 1(a)</xref> depicts the position of the accelerometers on the robot. <italic>A<sub>ix</sub></italic>, <italic>A<sub>iy</sub></italic> and <italic>A<sub>iz</sub></italic> are the measurements of each axis from the accelerometer <italic>A<sub>i</sub></italic>. <xref ref-type="fig" rid="f1-sensors-11-04335">Figure 1(b)</xref> is a schematic of the robot including its link parameters. <italic>θ<sub>i</sub></italic> represents the angular position of joint <italic>i. a<sub>i</sub></italic> and <italic>d<sub>i</sub></italic> represents the robot physical dimensions. Also, the localization of encoders <italic>E<sub>i</sub></italic> is shown.</p>
<p>For this work, the forward kinematics estimation consists on the estimation of the joint angular position (<italic>θ<sub>i</sub></italic>), the spatial position of each joint (<italic>X<sub>i</sub>,Y<sub>i</sub>, Z<sub>i</sub></italic>); and the roll (<italic>α<sub>i</sub></italic>), pitch (<italic>β<sub>i</sub></italic>), and yaw (<italic>γ<sub>i</sub></italic>) angles [<xref ref-type="bibr" rid="b1-sensors-11-04335">1</xref>]. Such angles represent the rotation along the <italic>Z</italic><sub>0</sub>,<italic>Y</italic><sub>0</sub>,<italic>X</italic><sub>0</sub> axes, respectively, required to obtain the orientation of each joint.</p>
<sec>
<label>2.1.1.</label>
<title>Angular Joint Position</title>
<p>The joint angular position is calculated with both encoder and accelerometer sensors. Afterwards, the obtained information is fused through a Kalman filter. In the case of the encoders, the angular joint position <italic>θ<sub>Ei</sub></italic> can be calculated using <xref ref-type="disp-formula" rid="FD1">Equation (1)</xref>, where <italic>E<sub>i</sub></italic> is the accumulated count given by encoder <italic>i</italic>; <italic>SF</italic> is a scale factor relating the minimum angular displacement required to obtain a count in the encoder, the units are rad/counts:
<disp-formula id="FD1">
<label>(1)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>θ</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>E</mml:mi>
<mml:mi>i</mml:mi></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">SF</mml:mi>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>E</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>)</mml:mo></mml:mrow></mml:math></disp-formula></p>
<p>Concerning the estimation of the angular joint position using accelerometers <italic>θ<sub>Ai</sub></italic>, the corresponding equations are summarized in <xref ref-type="table" rid="t1-sensors-11-04335">Table 1</xref>. In the case of the first angular position, the joint always moves perpendicularly to gravity force. Therefore, an accelerometer cannot detect the position changes in this joint. For this reason, only the encoder information is using for the angular position estimation in joint 1.</p>
<p>Such equations assume that the accelerometers provide a noise-free signal, which is unrealistic; thus, the signal requires a filtering stage before being used.</p></sec>
<sec sec-type="intro">
<label>2.1.2.</label>
<title>Forward Kinematics</title>
<p>Forward kinematics provides the position and orientation (roll, pitch and yaw) of the robot through the angular position of each joint. In this case, the forward kinematics is calculated through the standard Denavit-Hartenberg notation [<xref ref-type="bibr" rid="b4-sensors-11-04335">4</xref>]. The notation is a transformation matrix <sup>0</sup><italic>T<sub>i</sub></italic> relating the reference coordinate frame (<italic>Z</italic><sub>0</sub>,<italic>Y</italic><sub>0</sub>,<italic>X</italic><sub>0</sub>) with the coordinate frame of the joint <italic>i</italic> (<italic>X<sub>i</sub></italic>,<italic>Y<sub>i</sub></italic>,<italic>Z<sub>i</sub></italic>). The notation requires obtaining the link parameters of the robot. Those parameters are the link length (<italic>a<sub>i</sub></italic>), the link twist (<italic>ϕ<sub>i</sub></italic>), the joint distance (<italic>d<sub>i</sub></italic>) and the joint angle (<italic>θ<sub>i</sub></italic>). Based on <xref ref-type="fig" rid="f1-sensors-11-04335">Figure 1(b)</xref>, forward kinematics can be calculated through the link parameters presented in <xref ref-type="table" rid="t2-sensors-11-04335">Table 2</xref>.</p>
<p>Those parameters are used to estimate the transformation matrix <sup>0</sup><italic>T<sub>i</sub></italic>. The general form of the transformation matrix is presented in <xref ref-type="disp-formula" rid="FD2">Equation (2)</xref>:
<disp-formula id="FD2">
<label>(2)</label>
<mml:math display="block">
<mml:mrow>
<mml:mmultiscripts>
<mml:mi>T</mml:mi>
<mml:mprescripts/>
<mml:none/>
<mml:mn>0</mml:mn></mml:mmultiscripts>
<mml:msub>
<mml:mrow/>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable columnalign="left">
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>M</mml:mi>
<mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>D</mml:mi>
<mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>1</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>where <italic>M<sub>i</sub></italic> [<xref ref-type="disp-formula" rid="FD3">Equation (3)</xref>] contains the rotation information and <italic>D<sub>i</sub></italic> is a vector containing the position of the link <italic>i</italic> [<xref ref-type="disp-formula" rid="FD4">Equation (4)</xref>]:
<disp-formula id="FD3">
<label>(3)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mi>M</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable columnalign="left">
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>m</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>m</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>m</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn>3</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>m</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>m</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>m</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn>3</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>m</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn>3</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>m</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>m</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn>3</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>
<disp-formula id="FD4">
<label>(4)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mi>D</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable columnalign="left">
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>Therefore, forward kinematics can be calculated using <xref ref-type="disp-formula" rid="FD3">Equation (3)</xref> and <xref ref-type="disp-formula" rid="FD4">Equation (4)</xref>. Position is directly estimated through <xref ref-type="disp-formula" rid="FD4">Equation (4)</xref>. Orientation can be estimated using <xref ref-type="disp-formula" rid="FD5">Equations (5</xref>–<xref ref-type="disp-formula" rid="FD7">7</xref>). Where <italic>α<sub>i</sub></italic>,<italic>β<sub>i</sub></italic>,<italic>γ<sub>i</sub></italic> are the rotations along <italic>Z</italic><sub>0</sub>,<italic>Y</italic><sub>0</sub>,<italic>X</italic><sub>0</sub> axis, respectively:
<disp-formula id="FD5">
<label>(5)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi> </mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mtext>tan</mml:mtext></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msup>
<mml:mrow>
<mml:mo stretchy="true">(</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:msqrt>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>m</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn>3</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>m</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:msqrt></mml:mrow>
<mml:mo>/</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>m</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:mrow>
<mml:mo stretchy="true">)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>
<disp-formula id="FD6">
<label>(6)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>β</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mtext>tan</mml:mtext>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msup>
<mml:mrow>
<mml:mo stretchy="true">(</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>m</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn>3</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow>
<mml:mo>/</mml:mo>
<mml:mrow>
<mml:msqrt>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>m</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn>3</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:msqrt></mml:mrow></mml:mrow></mml:mrow>
<mml:mo stretchy="true">)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>
<disp-formula id="FD7">
<label>(7)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mi>γ</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mtext>tan</mml:mtext>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:msqrt>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>m</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn>3</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>m</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn>3</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>3</mml:mn></mml:mrow>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:msqrt></mml:mrow>
<mml:mo>/</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>m</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn>3</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p></sec>
<sec sec-type="intro">
<label>2.1.3.</label>
<title>Sequential Computation of Forward Kinematics</title>
<p>Encoders can provide a high-resolution measurement, but they are not capable of detecting some nonlinearities. Conversely, accelerometers, mounted on the robot, can detect some joint flexibilities and they provide an absolute measuring of orientation as well; however, the measurements are noisy and need filtering before being used. The fusion information of encoder and accelerometer takes the best of both sensors incrementing the accuracy of the monitored angular positions. A flow diagram that depicts the required sequential computing for sensor fusion and forward kinematics estimation is presented in <xref ref-type="fig" rid="f2-sensors-11-04335">Figure 2</xref>. The required operations are the acquisition of six encoder signals, conversion from encoder counts to radians, acquisition of twelve accelerometer signals, estimation of each-joint angular position, Fusion of encoder and accelerometer signals and the estimation of the forward kinematics for each axis.</p>
<p>Because of the amount of tasks that must be executed to obtain the forward kinematics estimation, conventional sequential processors are not suitable for the implementation since conventional industrial controllers require a measurement at a sampling period of 1 ms for conventional controllers, and 100 μs for high-speed controllers [<xref ref-type="bibr" rid="b27-sensors-11-04335">27</xref>]. Moreover, evaluating the forward kinematics for each joint is not an easy task since the model complexity increases proportionally to the number of joints to be calculated [<xref ref-type="bibr" rid="b16-sensors-11-04335">16</xref>].</p></sec></sec>
<sec sec-type="intro">
<label>2.2.</label>
<title>FPGA-Based Forward Kinematics Smart Processor</title>
<p>Due to the amount of signals to be processed in order to obtain a robot’s forward kinematics a sequential processor is not recommendable for online operation. Conversely, FPGA provide significant advantages in signal processing due to their parallel computation capabilities and their reconfigurability [<xref ref-type="bibr" rid="b28-sensors-11-04335">28</xref>] being helpful to process all the encoder-accelerometer signals online and to obtain the robot forward kinematics. Moreover, it is demonstrated that an algorithm implemented in FPGA processes 10–100 times faster than DSP and microprocessors [<xref ref-type="bibr" rid="b27-sensors-11-04335">27</xref>]. For this reason the proposed smart processor is implemented in an FPGA.</p>
<p>A general block diagram depicting the interconnection of the sensor network with the FPGA-based forward kinematics smart processor is presented in <xref ref-type="fig" rid="f3-sensors-11-04335">Figure 3</xref>. Accelerometer information is digitalized by an analog-to-digital converter (ADC), and received by the smart processor through the ADC driver. Similarly, encoder information is managed by the smart processor through the encoder driver. Encoder and accelerometer information is filtered by arranged fused smart-sensor structures. Each structure filters and fuses the sensors information and estimates the joints angular position <italic>θ<sub>i</sub></italic>. Subsequently, the information is used by the forward kinematics processor in order to obtain the forward kinematics of each joint online.</p>
<sec>
<label>2.2.1.</label>
<title>Fused Smart Sensor</title>
<p>The fused smart sensor processes the information from encoder and accelerometer in order to obtain the angular position of each joint. An accelerometer, when mounted onto the joint of a flexible robot, contains information about the orientation with respect to gravity, plus vibrations and noise [<xref ref-type="bibr" rid="b5-sensors-11-04335">5</xref>,<xref ref-type="bibr" rid="b29-sensors-11-04335">29</xref>]. Only the orientation information from the accelerometer is required to estimate the angular position of each joint. Such information is located at low frequencies of the accelerometer bandwidth [<xref ref-type="bibr" rid="b21-sensors-11-04335">21</xref>] requiring a filtering method and an additional processing unit to compute it. Filtering is a key factor to be considered since delays obtained with conventional filters are not permissible for online estimation. A method that has been proved to solve this issue is the Kalman filter [<xref ref-type="bibr" rid="b6-sensors-11-04335">6</xref>,<xref ref-type="bibr" rid="b7-sensors-11-04335">7</xref>,<xref ref-type="bibr" rid="b16-sensors-11-04335">16</xref>,<xref ref-type="bibr" rid="b17-sensors-11-04335">17</xref>,<xref ref-type="bibr" rid="b30-sensors-11-04335">30</xref>]. Moreover, sensor fusion is also possible with this technique. Therefore, this algorithm is selected to filter and to combine encoder and accelerometer signals. The basic fused smart sensor structure is shown in <xref ref-type="fig" rid="f4-sensors-11-04335">Figure 4</xref>. Encoder <italic>E<sub>i</sub></italic> and accelerometer <italic>A</italic><sub><italic>i</italic>−1</sub> are oversampled, which helps to reduce the signal-to-quantization-noise ratio (SQNR) [<xref ref-type="bibr" rid="b21-sensors-11-04335">21</xref>] and improves the filter response. The filtering stage (KF1) is performed by a Kalman filter, having the accelerometer signals as inputs (<italic>A<sub>i</sub></italic><sub>−1</sub><italic><sub>X</sub></italic>,<italic>A<sub>i</sub></italic><sub>−1</sub><italic><sub>Y</sub></italic>,<italic>A<sub>i</sub></italic><sub>−1</sub><italic><sub>Z</sub></italic>). Next, filtered accelerometer signals (
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mi>A</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mi> </mml:mi>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mo>*</mml:mo></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:mi> </mml:mi>
<mml:msubsup>
<mml:mi>A</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mi> </mml:mi>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mo>*</mml:mo></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:mi> </mml:mi>
<mml:msubsup>
<mml:mrow>
<mml:mi>A</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mi> </mml:mi>
<mml:mi>Z</mml:mi></mml:mrow>
<mml:mo>*</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula>) are sent to a processing unit TF where the angular position of the joint <italic>θ<sub>Ai</sub></italic> is calculated. The encoder signal is processed in concordance with (1) in order to obtain the angular position <italic>θ<sub>Ai</sub></italic>. After that, the joint angular position, estimated with encoder and accelerometer, are sent to a Kalman filter (KF2) where sensor fusion is executed. Finally, an average decimation filter (ADF) [<xref ref-type="bibr" rid="b21-sensors-11-04335">21</xref>] is applied to the fused angular position 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>θ</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>*</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula> to match the working sample frequency of the robot.</p>
<p>The equations for the Kalman filter are based on [<xref ref-type="bibr" rid="b31-sensors-11-04335">31</xref>] and are described next. A Kalman filter works similarly to a feedback controller; the filter estimates the next state of the signal (predict) and then it obtains feedback in the form of noisy measurements to modify the predicted state (correct). General equations for the “predict” stage are presented in <xref ref-type="disp-formula" rid="FD8">Equations (8)</xref> and <xref ref-type="disp-formula" rid="FD9">(9)</xref>:
<disp-formula id="FD8">
<label>(8)</label>
<mml:math display="block">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>*</mml:mo></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mi>S</mml:mi>
<mml:mi> </mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:mi>B</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></disp-formula>
<disp-formula id="FD9">
<label>(9)</label>
<mml:math display="block">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>*</mml:mo></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mi>S</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub>
<mml:msup>
<mml:mrow>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mo>+</mml:mo>
<mml:mi>Q</mml:mi></mml:mrow></mml:math></disp-formula></p>
<p>Matrix <italic>S</italic> relates the previous state (<italic>X<sub>k</sub></italic><sub>−1</sub>) and the estimated actual state (
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>*</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula>), <italic>B</italic> relates an optional control input <italic>u</italic> with 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>*</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula>, <italic>Q</italic> is the process covariance and 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>*</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula> is the <italic>a priori</italic> estimated error covariance.</p>
<p>In the case of the “correct” stage, the required equations are summarized in <xref ref-type="disp-formula" rid="FD10">Equations (10</xref>–<xref ref-type="disp-formula" rid="FD12">12</xref>), where <italic>R</italic> is the measurement noise covariance, <italic>H</italic> relates the measurements (<italic>Z<sub>k</sub></italic>) with the current state <italic>X<sub>k</sub></italic>, <italic>K<sub>k</sub></italic> is a gain factor that minimizes the <italic>a posteriori</italic> estimated error covariance (<italic>P<sub>k</sub></italic>):
<disp-formula id="FD10">
<label>(10)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>*</mml:mo></mml:msubsup>
<mml:msup>
<mml:mrow>
<mml:mi>H</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mi>H</mml:mi>
<mml:mi> </mml:mi>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>*</mml:mo></mml:msubsup>
<mml:mi> </mml:mi>
<mml:msup>
<mml:mrow>
<mml:mi>H</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mo>+</mml:mo>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></disp-formula>
<disp-formula id="FD11">
<label>(11)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>*</mml:mo></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>k</mml:mi></mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:mi>H</mml:mi>
<mml:mi> </mml:mi>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>*</mml:mo></mml:msubsup></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>
<disp-formula id="FD12">
<label>(12)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>k</mml:mi></mml:msub>
<mml:mi>H</mml:mi></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>*</mml:mo></mml:msubsup></mml:mrow></mml:math></disp-formula></p>
<p>Concerning the filtering stage KF1, matrix <italic>S</italic> is an identity matrix; <italic>B</italic> = 0; 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mi>X</mml:mi>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>A</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mo>*</mml:mo></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>A</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mo>*</mml:mo></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>A</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mi>Z</mml:mi></mml:mrow>
<mml:mo>*</mml:mo></mml:msubsup>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula>, <italic>Z</italic> = [<italic>A<sub>i</sub></italic><sub>−1</sub><italic><sub>X</sub></italic>,<italic>A<sub>i</sub></italic><sub>−1</sub><italic><sub>Y</sub></italic>,<italic>A<sub>i</sub></italic><sub>−1</sub><italic><sub>Z</sub></italic>]<italic><sup>T</sup></italic>; <italic>Q</italic> is a diagonal matrix containing the covariance of each signal; likewise, <italic>R</italic> is a diagonal matrix with the noise covariance of each signal and <italic>H</italic> is an identity matrix. The processing unit TF differs for each joint of the robot. Required equations are summarized in <xref ref-type="table" rid="t1-sensors-11-04335">Table 1</xref>.</p>
<p>Stage KF2 is a Kalman filter designed for the sensor fusion of two signals; in this case the parameters of the general <xref ref-type="disp-formula" rid="FD8">Equations (8</xref>–<xref ref-type="disp-formula" rid="FD12">12</xref>):<italic>S</italic> = 1; <italic>B</italic> = 0; 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mi>X</mml:mi>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>θ</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>*</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula>, <italic>Z</italic> = [<italic>θ<sub>Ei</sub></italic>, <italic>θ<sub>Ai</sub></italic>]<italic><sup>T</sup></italic>, <italic>Q</italic>, is the covariance of the angular position; <italic>R</italic> is a diagonal matrix with the noise covariance of each input signal and <italic>H</italic> = [1,1]<italic><sup>T</sup></italic>.</p>
<p>The averaging decimation filter is described in <xref ref-type="disp-formula" rid="FD13">Equation (13)</xref>, where <italic>N</italic> is a decimation factor relating the sampling rate of the sensors acquisition and the working sample frequency of the robot controller:
<disp-formula id="FD13">
<label>(13)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>θ</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>N</mml:mi></mml:mfrac>
<mml:munderover>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn></mml:mrow>
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:munderover>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>θ</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>*</mml:mo></mml:msubsup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mi>j</mml:mi></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mrow></mml:math></disp-formula></p></sec>
<sec sec-type="intro">
<label>2.2.2.</label>
<title>Forward Kinematics Hardware Structure</title>
<p>An important block of the smart processor is the block in charge of the forward kinematics (<xref ref-type="fig" rid="f5-sensors-11-04335">Figure 5</xref>). The input parameters are the link dimensions (<italic>a<sub>i</sub>, d<sub>i</sub></italic>) and the angular position of each link (<italic>θ<sub>i</sub></italic>), those parameters are used by two sub-processors to estimate position (<italic>X<sub>i</sub>, Y<sub>i</sub>, Z<sub>i</sub></italic>) and orientation (<italic>α<sub>i</sub></italic>,<italic>β<sub>i</sub></italic>,<italic>γ<sub>i</sub></italic>) of each link in concordance with <xref ref-type="disp-formula" rid="FD4">Equations (4</xref>–<xref ref-type="disp-formula" rid="FD7">7</xref>). The position estimator uses a multiplier-accumulator unit (MAC) and a coordinate rotation digital computer (CORDIC) configured to execute sine and cosine operations [<xref ref-type="bibr" rid="b32-sensors-11-04335">32</xref>]; both are coordinated by a control unit that manages the operations performed for each unit. The estimated position is sent to a register bank. At the same time, the orientation estimator calculates the orientation of each joint. This processor has two embedded CORDIC units to estimate sine, cosine and arctangent functions. Also, a square root unit and a MAC unit are embedded. Alike the position estimator, a control unit coordinates the operations executed for each block and, when the orientation estimation is ready, the data is sent to the register bank.</p></sec></sec></sec>
<sec sec-type="results">
<label>3.</label>
<title>Experiments and Results</title>
<p>In this section, the experimental setup and the results are presented for validating the proposed fused smart sensor network. The experimentation has three main objectives: firstly, a comparison of processing speed between a personal computer and the proposed smart processor with the aim of validating the use of FPGA-based parallel architectures against sequential processing. Secondly, the monitoring of three-real-operation oriented trajectories with the fused smart sensor network.</p>
<p>Finally, an experiment where the proposed methodology is compared with the methodology used by commercial controllers. In the first experiment, the proposed methodology is programmed in an FPGA using the digital structure presented in <xref ref-type="fig" rid="f5-sensors-11-04335">Figure 5</xref>. Then, it is also programmed in its sequential form and executed on a personal computer. The FPGA resource usage is shown and a time comparative between FPGA and personal computer is presented.</p>
<p>In the second experiment, three paths are monitored through the smart sensor network. The online estimation of the angular position and the forward kinematics of each joint are performed on a 6-DOF PUMA robot. The monitored paths are selected considering the motion characteristics of real automatic robotic operations. <xref ref-type="fig" rid="f6-sensors-11-04335">Figure 6</xref> shows the used paths and their relation with real operations in robots. Circle and square paths are selected considering welding joint operations, where lines and complex paths could be necessary. A zigzag path is designed considering a repetitive robotic operation such as painting. All the chosen paths have different complexity degree for being executed, due to the robot kinematics; the circle path has a low complexity degree, the square and zigzag path have higher complexity degree. Those paths are used to evaluate the robot controller performance.</p>
<p>Finally, in the last experiment the accuracy of the fused smart sensor network is evaluated. It consists of a comparison between two methods. First, the forward kinematics is calculated using high-resolution encoders (1,000 counts/rev). Next, the fused smart sensor network is used to calculate the forward kinematics. The errors of each sensing method are calculated through the methodology used in [<xref ref-type="bibr" rid="b33-sensors-11-04335">33</xref>] where lasers are utilized to obtain an accurate measurement of the position and orientation of the robot.</p>
<sec>
<label>3.1.</label>
<title>Experimental Setup</title>
<p>The experimental setup is shown in <xref ref-type="fig" rid="f7-sensors-11-04335">Figure 7</xref>, depicting the location of each accelerometer and the servomotors with the encoders. The used accelerometers are the LIS3L02AS4 units from STMicroelectronics [<xref ref-type="bibr" rid="b34-sensors-11-04335">34</xref>] featuring measurements in three axis, a bandwidth of 750 Hz, a user-selectable full scale of ±2 g/±6 g (g = 9.81 m/s<sup>2</sup>), a 0.66 V/g sensitivity and a 5 × 10<sup>−4</sup> resolution over a 100 Hz bandwidth. Accelerometer information is digitalized using 12-bit 4-channel ADS7841 ADC from Texas Instruments [<xref ref-type="bibr" rid="b35-sensors-11-04335">35</xref>], with a maximum sampling rate of 200 kHz for the four channels. The signals obtained from the sensor network are sent to the smart processor to estimate the angular position and the forward kinematics for each joint. A USB interface unit is added to the smart processor in order to send the monitored forward kinematics to a personal computer to be visualized by the user. A proprietary controller [<xref ref-type="bibr" rid="b27-sensors-11-04335">27</xref>] is used to control the robot at a sampling frequency of 1 kHz. The sampling frequency of the smart processor is set to 3 kHz.</p></sec>
<sec sec-type="results|discussion">
<label>3.2.</label>
<title>Results and Discussion</title>
<p>In this section, the results of the proposed experimentation are presented. Also, the main advantages of the proposed methodology are discussed.</p>
<sec>
<label>3.2.1.</label>
<title>Execution Time Comparative</title>
<p>The smart processor is implemented in a proprietary Spartan 3E XC3S1600E FPGA platform running at 48 MHz. <xref ref-type="table" rid="t3-sensors-11-04335">Table 3</xref> summarizes the resource usage of the FPGA after compilation.</p>
<p>The performance of the forward kinematics smart processor is compared with a personal computer (Sony Vaio VGN-CS170 featuring a two-core processor running at 2.26 GHz and 4 GB RAM). For each sample the smart processor requires 40 μs to calculate the complete forward kinematics, this processing time being suitable for conventional as well as high-speed servomotor controllers. On the other hand, the personal computer requires 21.22 ms to execute the same task. Therefore, the FPGA-based smart processor has the capability of online calculating the forward kinematics of a 6-DOF robot, while the PC is unable to perform the task online.</p></sec>
<sec>
<label>3.2.2.</label>
<title>Path Monitoring</title>
<p>Encoder and accelerometer signals are monitored during the execution of the three paths in the 6-DOF PUMA robot. In <xref ref-type="fig" rid="f8-sensors-11-04335">Figure 8</xref>, the monitored encoder [<xref ref-type="fig" rid="f8-sensors-11-04335">Figure 8(a)</xref>] and accelerometer [<xref ref-type="fig" rid="f8-sensors-11-04335">Figure 8(b)</xref>] signals from the sensor network are presented for the case of the circle path. It can be observed that the encoder signals of each joint are noise free, due to their digital nature. Conversely, the accelerometers provide noisy measurements.</p>
<p>The sensor network is composed of encoders and accelerometers that are processed by the FPGA-based forward kinematics smart processor, taking advantage of each sensor. <xref ref-type="fig" rid="f9-sensors-11-04335">Figure 9</xref> shows the accelerometer signals after the filtering stage KF1, for the case of the circle path. The use of a Kalman filter for this purpose allows obtaining the filtered signals without delays.</p>
<p><xref ref-type="fig" rid="f10-sensors-11-04335">Figure 10</xref> shows the angular position <italic>θ<sub>i</sub></italic> obtained after the fusion and decimation of the angular position estimated with accelerometers <italic>θ<sub>Ai</sub></italic> and the estimated with encoders <italic>θ<sub>Ei</sub></italic>. Fused angular position takes the best of each sensor, the high resolution of encoders and the absolute measuring provided by accelerometers.</p>
<p>With the aim of depicting the controller tracking monitored with the fused smart sensor network, <xref ref-type="fig" rid="f11-sensors-11-04335">Figure 11</xref> shows the controller errors in each joint of the robot <italic>ɛθ<sub>i</sub></italic>, when circle [<xref ref-type="fig" rid="f11-sensors-11-04335">Figure 11(a)</xref>], square [<xref ref-type="fig" rid="f11-sensors-11-04335">Figure 11(b)</xref>] and zigzag [<xref ref-type="fig" rid="f11-sensors-11-04335">Figure 11(c)</xref>] paths are executed.</p>
<p>As summarized in <xref ref-type="table" rid="t4-sensors-11-04335">Table 4</xref>, the joint angular position errors <italic>ɛθ<sub>i</sub></italic> are monitored with the fused smart sensor network. Both absolute and relative errors are shown for the case of circle, square, and zigzag paths. As it can be seen, the major problem is found in the square path movement, where joint 5 has the highest absolute and relative error. Such problem can occur because of the controller tuning or some mechanical problems in the robot.</p>
<p>In <xref ref-type="fig" rid="f12-sensors-11-04335">Figure 12</xref>, the obtained angular position <italic>θ<sub>i</sub></italic> and the dimensions (<italic>a<sub>i</sub></italic>,<italic>d<sub>i</sub></italic>), are used by the forward kinematics processor in order to obtain the position [<xref ref-type="fig" rid="f12-sensors-11-04335">Figure 12(a)</xref>] and orientation [<xref ref-type="fig" rid="f12-sensors-11-04335">Figure 12(b)</xref>] for each joint. The obtained data corresponds to the circle path.</p>
<p>In order to evaluate the performance of the robot controller, the analytical end effector paths are compared with those measured with the fused smart sensor network. <xref ref-type="fig" rid="f13-sensors-11-04335">Figure 13</xref> shows both the analytical and estimated path for the case of the circle [<xref ref-type="fig" rid="f13-sensors-11-04335">Figure 13(a)</xref>], square [<xref ref-type="fig" rid="f13-sensors-11-04335">Figure 13(b)</xref>] and zigzag paths [<xref ref-type="fig" rid="f13-sensors-11-04335">Figure 13(c)</xref>]. Errors between analytical and estimated paths for each axis (<italic>ɛX</italic><sub>6</sub>,<italic>ɛY</italic><sub>6</sub>,<italic>ɛZ</italic><sub>6</sub>) are shown in <xref ref-type="fig" rid="f13-sensors-11-04335">Figure 13(d–e)</xref> for the case of the welding paths and <xref ref-type="fig" rid="f13-sensors-11-04335">Figure 13(f)</xref> in the case of painting path. Due to the characteristics of the fused smart processor network the proprietary controller errors are estimated and evaluated. Such errors fluctuate around 10 mm in the case of the circle path, 20 mm for the square path and 10 mm for the zigzag path.</p>
<p>As well as position, the orientation end effector accuracy is evaluated using the fused smart sensor network. A representation of the monitored orientation is shown in <xref ref-type="fig" rid="f14-sensors-11-04335">Figure 14(a)</xref> for the case of circle path, <xref ref-type="fig" rid="f14-sensors-11-04335">Figure 14(b)</xref> for the case of square path and <xref ref-type="fig" rid="f14-sensors-11-04335">Figure 14(c)</xref> for the zigzag path. <xref ref-type="fig" rid="f14-sensors-11-04335">Figure 14(d–e)</xref> show the orientation errors (<italic>ɛα</italic><sub>6</sub>,<italic>ɛβ</italic><sub>6</sub>,<italic>ɛγ</italic><sub>6</sub>) for the circle, square and zigzag path respectively. Controller error oscillates around 0.08 rad for the circle path, around 0.1 rad in the case of the square path and 0.06 rad for the zigzag path.</p>
<p>The end effector position errors (<italic>ɛX</italic><sub>6</sub>,<italic>ɛY</italic><sub>6</sub>,<italic>ɛZ</italic><sub>6</sub>) and orientation errors (<italic>ɛα</italic><sub>6</sub>,<italic>ɛβ</italic><sub>6</sub>,<italic>ɛγ</italic><sub>6</sub>) are found with the fused smart sensor network are summarized in <xref ref-type="table" rid="t5-sensors-11-04335">Table 5</xref>. The major problems are found in the square path, where the highest absolute and relative errors are measured. Such errors could be utilized by the controller and compensate them in order to increase the robot accuracy.</p>
<p>Three real-operation-oriented paths are analyzed in the experimentation showing the capability of the fused smart sensor network to perform an online estimation of the angular position and the forward kinematics of each joint of a 6-DOF PUMA Robot. A complete forward kinematics estimation would be advantageous to improve the robot performance, since the proposed fused smart sensor can evaluate the angular position of each joint <italic>θ<sub>i</sub></italic> online, at the same time than position (<italic>X<sub>i</sub></italic>,<italic>Y<sub>i</sub></italic>,<italic>Z<sub>i</sub></italic>) and orientation (<italic>α<sub>i</sub></italic>,<italic>β<sub>i</sub></italic>,<italic>γ<sub>i</sub></italic>) are estimated.</p></sec>
<sec>
<label>3.2.3.</label>
<title>Methodology Comparative</title>
<p>The forward kinematics estimation obtained by using only encoders is compared with the forward kinematics estimation obtained by using the smart sensor network. To guarantee the repeatability of the measurements, the experiment is repeated 40 times. <xref ref-type="table" rid="t6-sensors-11-04335">Table 6</xref> shows the obtained relative errors. It is observed that the fusion of encoder and accelerometer provides a more accurate measurement when compared with the conventional encoder sensing.</p>
<p>Additionally, the proposed work is compared with other proposals through <xref ref-type="table" rid="t7-sensors-11-04335">Table 7</xref>, where a comparative of the number of estimated parameters and the implementation features are shown. It can be observed that most of the work proposes a fusing method to improve the estimations. However, all the works limit their proposals to one or three DOF due to the complexity of evaluating forward kinematics in multi-axis robots [<xref ref-type="bibr" rid="b16-sensors-11-04335">16</xref>] and the orientation information is not provided.</p></sec></sec></sec>
<sec sec-type="conclusions">
<label>4.</label>
<title>Conclusions</title>
<p>This work proposes a fused smart-sensor network for online estimation of the angular position and the forward kinematics of each joint in a 6-DOF PUMA robot. The smart processor collects the data sent from a sensor network composed by six encoders and four 3-axis accelerometers; this data is filtered and fused through Kalman filters. This guarantees that the joint angular positions are obtained without adding delays that are common in conventional filters. Moreover, owing to the reconfigurability and parallel computing of FPGA the proposed hardware structure features low execution time allowing the smart processor to calculate the robot forward kinematics of each joint online. The path monitoring shows the importance of fusing accelerometers and encoders signals to increment the accuracy of the forward kinematics estimation. The proposal allowed the evaluation of the robot controller performance through real-operation-oriented motions. Some errors that can be attributed to the controller tuning or some nonlinearities such as backlash and other structural deformations are found with the smart sensor network.</p>
<p>Furthermore, the methodologies comparative shows that the accuracy of the fused smart sensor is better when compared with the conventional encoder sensing. In addition, the comparison of features between the proposed smart sensor network and other reported works highlights the benefits of using the proposed methodology for the forward kinematics estimation in 6-DOF robots.</p>
<p>The proposed fused smart sensor network can be used in future research where the online estimated position of each joint can be used to feedback the controller in order to increase its performance. Moreover, additional sensors, such as gyroscopes and tilt sensors can be added to the sensor network in order to increase the precision of the monitored variables. Forward kinematics allows the estimation of the position and orientation of each joint, and most importantly, the end effector, in which the joints motion are considered collectively. This can be useful in industrial applications such as welding and painting operations, where precision and accuracy are mandatory.</p></sec></body>
<back>
<ack>
<p>This project was partially supported by CONACyT scholarship 217623, FOMIX-QRO-2008-CO2-102123 and SEP-CONACyT 84723 projects.</p></ack>
<ref-list>
<title>References</title>
<ref id="b1-sensors-11-04335"><label>1.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Sciavicco</surname><given-names>L</given-names></name><name><surname>Siciliano</surname><given-names>B</given-names></name></person-group><source>Modelling and Control of Robot Manipulators</source><edition>2nd ed</edition><publisher-name>Springer</publisher-name><publisher-loc>London, UK</publisher-loc><year>2000</year><fpage>3</fpage><lpage>6</lpage></citation></ref>
<ref id="b2-sensors-11-04335"><label>2.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Garcia</surname><given-names>E</given-names></name><name><surname>Jimenez</surname><given-names>MA</given-names></name><name><surname>De Santos</surname><given-names>PG</given-names></name><name><surname>Armada</surname><given-names>M</given-names></name></person-group><article-title>The evolution of robotics research</article-title><source>IEEE Robot. Autom. Mag</source><year>2007</year><volume>14</volume><fpage>90</fpage><lpage>103</lpage><pub-id pub-id-type="doi">10.1109/MRA.2007.339608</pub-id></citation></ref>
<ref id="b3-sensors-11-04335"><label>3.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Tarjan</surname><given-names>L</given-names></name><name><surname>Skrinjar</surname><given-names>D</given-names></name><name><surname>Ostojic</surname><given-names>G</given-names></name><name><surname>Senk</surname><given-names>I</given-names></name></person-group><article-title>Using a didactic manipulator in mechatronics and industrial engineering courses</article-title><source>IEEE Trans. Educ</source><year>2010</year><volume>53</volume><fpage>572</fpage><lpage>579</lpage><pub-id pub-id-type="doi">10.1109/TE.2009.2036002</pub-id></citation></ref>
<ref id="b4-sensors-11-04335"><label>4.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Reza</surname><given-names>N</given-names></name></person-group><source>Theory of Applied Robotics: Kinematics, Dynamics, and Control</source><edition>2nd ed</edition><publisher-name>Springer</publisher-name><publisher-loc>New York, NY, USA</publisher-loc><year>2010</year><fpage>33</fpage><lpage>715</lpage></citation></ref>
<ref id="b5-sensors-11-04335"><label>5.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Rodriguez-Donate</surname><given-names>C</given-names></name><name><surname>Morales-Velazquez</surname><given-names>L</given-names></name><name><surname>Osornio-Rios</surname><given-names>RA</given-names></name><name><surname>Herrera-Ruiz</surname><given-names>G</given-names></name><name><surname>Romero-Troncoso</surname><given-names>RJ</given-names></name></person-group><article-title>FPGA-based fused smart sensor for dynamic and vibration parameter extraction in industrial robot links</article-title><source>Sensors</source><year>2010</year><volume>10</volume><fpage>4114</fpage><lpage>4129</lpage><pub-id pub-id-type="doi">10.3390/s100404114</pub-id><pub-id pub-id-type="pmid">22319345</pub-id></citation></ref>
<ref id="b6-sensors-11-04335"><label>6.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Soo</surname><given-names>J</given-names></name><name><surname>Masayoshi</surname><given-names>T</given-names></name><name><surname>Tetsuaki</surname><given-names>K</given-names></name></person-group><article-title>Kinematic Kalman filter (KKF) for robot end-effector Sensing</article-title><source>J. Dyn. Sys. Meas. Control</source><year>2009</year><volume>131</volume><fpage>021010</fpage><pub-id pub-id-type="doi">10.1115/1.3023124</pub-id></citation></ref>
<ref id="b7-sensors-11-04335"><label>7.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Jinchuan</surname><given-names>Z</given-names></name><name><surname>Minyue</surname><given-names>F</given-names></name></person-group><article-title>A reset state estimator using an accelerometer for enhanced motion control with sensor quantization</article-title><source>IEEE Trans. Contr. Syst. Technol</source><year>2010</year><volume>18</volume><fpage>79</fpage><lpage>90</lpage><pub-id pub-id-type="doi">10.1109/TCST.2009.2014467</pub-id></citation></ref>
<ref id="b8-sensors-11-04335"><label>8.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Olabi</surname><given-names>A</given-names></name><name><surname>Béarée</surname><given-names>R</given-names></name><name><surname>Gibaru</surname><given-names>O</given-names></name><name><surname>Damak</surname><given-names>M</given-names></name></person-group><article-title>Feedrate planning for machining with industrial six-axis robots</article-title><source>Control Eng. Pract</source><year>2010</year><volume>18</volume><fpage>471</fpage><lpage>482</lpage><pub-id pub-id-type="doi">10.1016/j.conengprac.2010.01.004</pub-id></citation></ref>
<ref id="b9-sensors-11-04335"><label>9.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Väliviita</surname><given-names>S</given-names></name><name><surname>Ovaska</surname><given-names>SJ</given-names></name></person-group><article-title>Delayless acceleration measurement method for elevator control</article-title><source>IEEE Trans. Ind. Electron</source><year>1998</year><volume>45</volume><fpage>364</fpage><lpage>366</lpage><pub-id pub-id-type="doi">10.1109/41.681239</pub-id></citation></ref>
<ref id="b10-sensors-11-04335"><label>10.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>De Santiago-Pérez</surname><given-names>JJ</given-names></name><name><surname>Osornio-Rios</surname><given-names>RA</given-names></name><name><surname>Romero-Troncoso</surname><given-names>RJ</given-names></name><name><surname>Herrera-Ruiz</surname><given-names>G</given-names></name><name><surname>Delgado-Rosas</surname><given-names>M</given-names></name></person-group><article-title>DSP algorithm for the extraction of dynamics parameters in CNC machine tool servomechanisms from an optical incremental encoder</article-title><source>Int. J. Mach. Tool Manu</source><year>2008</year><volume>48</volume><fpage>1318</fpage><lpage>1334</lpage><pub-id pub-id-type="doi">10.1016/j.ijmachtools.2008.06.004</pub-id></citation></ref>
<ref id="b11-sensors-11-04335"><label>11.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Morales-Velazquez</surname><given-names>L</given-names></name><name><surname>Romero-Troncoso</surname><given-names>RJ</given-names></name><name><surname>Osornio-Rios</surname><given-names>RA</given-names></name><name><surname>Cabal-Yepez</surname><given-names>E</given-names></name></person-group><article-title>Sensorless jerk monitoring using an adaptive antisymmetric high-order FIR filter</article-title><source>Mech. Syst. Signal Pr</source><year>2009</year><volume>23</volume><fpage>2383</fpage><lpage>2394</lpage><pub-id pub-id-type="doi">10.1016/j.ymssp.2009.02.012</pub-id></citation></ref>
<ref id="b12-sensors-11-04335"><label>12.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Jian</surname><given-names>G</given-names></name><name><surname>Webb</surname><given-names>P</given-names></name><name><surname>Gindy</surname><given-names>N</given-names></name></person-group><article-title>Evaluation of a low-cost inertial dynamic measurement system</article-title><conf-name>Proceedings of IEEE Conference on Robotics, Automation and Mechatronics</conf-name><conf-loc>Chengdu, China</conf-loc><conf-date>21–24 September 2008</conf-date><fpage>1</fpage><lpage>5</lpage></citation></ref>
<ref id="b13-sensors-11-04335"><label>13.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Lai</surname><given-names>Y-C</given-names></name><name><surname>Jan</surname><given-names>S-S</given-names></name><name><surname>Hsiao</surname><given-names>F-B</given-names></name></person-group><article-title>Development of a low-cost attitude and heading reference system using a three-axis rotating platform</article-title><source>Sensors</source><year>2010</year><volume>10</volume><fpage>2472</fpage><lpage>2491</lpage><pub-id pub-id-type="doi">10.3390/s100402472</pub-id><pub-id pub-id-type="pmid">22319258</pub-id></citation></ref>
<ref id="b14-sensors-11-04335"><label>14.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Wang</surname><given-names>X</given-names></name><name><surname>Wang</surname><given-names>S</given-names></name><name><surname>Ma</surname><given-names>J-J</given-names></name></person-group><article-title>An improved particle filter for target tracking in sensor systems</article-title><source>Sensors</source><year>2007</year><volume>7</volume><fpage>144</fpage><lpage>156</lpage><pub-id pub-id-type="doi">10.3390/s7010144</pub-id></citation></ref>
<ref id="b15-sensors-11-04335"><label>15.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Barshan</surname><given-names>B</given-names></name><name><surname>Durrant-Whyte</surname><given-names>HF</given-names></name></person-group><article-title>Evaluation of a solid-state gyroscope for robotics applications</article-title><source>IEEE Trans. Instrum. Meas</source><year>1995</year><volume>44</volume><fpage>61</fpage><lpage>67</lpage><pub-id pub-id-type="doi">10.1109/19.368102</pub-id></citation></ref>
<ref id="b16-sensors-11-04335"><label>16.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Henriksson</surname><given-names>R</given-names></name><name><surname>Norrlof</surname><given-names>M</given-names></name><name><surname>Moberg</surname><given-names>S</given-names></name><name><surname>Wernholt</surname><given-names>E</given-names></name><name><surname>Schon</surname><given-names>TB</given-names></name></person-group><article-title>Experimental comparison of observers for tool position estimation of industrial robots</article-title><conf-name>Proceedings of IEEE Conference on Decision Control</conf-name><conf-loc>Shanghai, China</conf-loc><conf-date>15–18 December 2009</conf-date><fpage>8065</fpage><lpage>8070</lpage></citation></ref>
<ref id="b17-sensors-11-04335"><label>17.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Hol</surname><given-names>J</given-names></name><name><surname>Schön</surname><given-names>T</given-names></name><name><surname>Luinge</surname><given-names>H</given-names></name><name><surname>Slycke</surname><given-names>P</given-names></name><name><surname>Gustafsson</surname><given-names>F</given-names></name></person-group><article-title>Robust real-time tracking by fusing measurements from inertial and vision sensors</article-title><source>J. Real-Time Image Proc</source><year>2007</year><volume>2</volume><fpage>149</fpage><lpage>160</lpage><pub-id pub-id-type="doi">10.1007/s11554-007-0040-2</pub-id></citation></ref>
<ref id="b18-sensors-11-04335"><label>18.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Liu</surname><given-names>HHS</given-names></name><name><surname>Pang</surname><given-names>GKH</given-names></name></person-group><article-title>Accelerometer for mobile robot positioning</article-title><source>IEEE Trans. Ind. Appl</source><year>2001</year><volume>37</volume><fpage>812</fpage><lpage>819</lpage><pub-id pub-id-type="doi">10.1109/28.924763</pub-id></citation></ref>
<ref id="b19-sensors-11-04335"><label>19.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Jassemi-Zargani</surname><given-names>R</given-names></name><name><surname>Necsulescu</surname><given-names>D</given-names></name></person-group><article-title>Extended Kalman filter-based sensor fusion for operational space control of a robot arm</article-title><source>IEEE Trans. Instrum. Meas</source><year>2002</year><volume>51</volume><fpage>1279</fpage><lpage>1282</lpage><pub-id pub-id-type="doi">10.1109/TIM.2002.808050</pub-id></citation></ref>
<ref id="b20-sensors-11-04335"><label>20.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Dumetz</surname><given-names>E</given-names></name><name><surname>Dieulot</surname><given-names>JY</given-names></name><name><surname>Barre</surname><given-names>PJ</given-names></name><name><surname>Colas</surname><given-names>F</given-names></name><name><surname>Delplace</surname><given-names>T</given-names></name></person-group><article-title>Control of an industrial robot using acceleration feedback</article-title><source>J. Intell. Robot Syst</source><year>2006</year><volume>46</volume><fpage>111</fpage><lpage>128</lpage><pub-id pub-id-type="doi">10.1007/s10846-006-9042-8</pub-id></citation></ref>
<ref id="b21-sensors-11-04335"><label>21.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Rangel-Magdaleno</surname><given-names>JJ</given-names></name><name><surname>Romero-Troncoso</surname><given-names>RJ</given-names></name><name><surname>Osornio-Rios</surname><given-names>RA</given-names></name><name><surname>Cabal-Yepez</surname><given-names>E</given-names></name></person-group><article-title>Novel oversampling technique for improving signal-to-quantization noise ratio on accelerometer-based smart jerk sensors in CNC applications</article-title><source>Sensors</source><year>2009</year><volume>9</volume><fpage>3767</fpage><lpage>3789</lpage><pub-id pub-id-type="doi">10.3390/s90503767</pub-id><pub-id pub-id-type="pmid">22412337</pub-id></citation></ref>
<ref id="b22-sensors-11-04335"><label>22.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Trejo-Hernandez</surname><given-names>M</given-names></name><name><surname>Osornio-Rios</surname><given-names>R</given-names></name><name><surname>Romero-Troncoso</surname><given-names>R</given-names></name><name><surname>Rodriguez-Donate</surname><given-names>C</given-names></name><name><surname>Dominguez-Gonzalez</surname><given-names>A</given-names></name><name><surname>Herrera-Ruiz</surname><given-names>G</given-names></name></person-group><article-title>FPGA-based fused smart-sensor for tool-wear area quantitative estimation in CNC machine inserts</article-title><source>Sensors</source><year>2010</year><volume>10</volume><fpage>3373</fpage><lpage>3388</lpage><pub-id pub-id-type="doi">10.3390/s100403373</pub-id><pub-id pub-id-type="pmid">22319304</pub-id></citation></ref>
<ref id="b23-sensors-11-04335"><label>23.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Garcia</surname><given-names>JG</given-names></name><name><surname>Robertsson</surname><given-names>A</given-names></name><name><surname>Ortega</surname><given-names>JG</given-names></name><name><surname>Johansson</surname><given-names>R</given-names></name></person-group><article-title>Sensor fusion for compliant robot motion control</article-title><source>IEEE Trans. Robot</source><year>2008</year><volume>24</volume><fpage>430</fpage><lpage>441</lpage><pub-id pub-id-type="doi">10.1109/TRO.2008.918057</pub-id></citation></ref>
<ref id="b24-sensors-11-04335"><label>24.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Garcia</surname><given-names>JG</given-names></name><name><surname>Ortega</surname><given-names>JG</given-names></name><name><surname>Garcia</surname><given-names>AS</given-names></name><name><surname>Martinez</surname><given-names>SS</given-names></name></person-group><article-title>Robotic software architecture for multisensor fusion system</article-title><source>IEEE Trans. Ind. Electron</source><year>2009</year><volume>56</volume><fpage>766</fpage><lpage>777</lpage><pub-id pub-id-type="doi">10.1109/TIE.2008.2007014</pub-id></citation></ref>
<ref id="b25-sensors-11-04335"><label>25.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Mekid</surname><given-names>S</given-names></name></person-group><article-title>Further structural intelligence for sensors cluster technology in manufacturing</article-title><source>Sensors</source><year>2006</year><volume>6</volume><fpage>557</fpage><lpage>577</lpage></citation></ref>
<ref id="b26-sensors-11-04335"><label>26.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Grimes</surname><given-names>C</given-names></name><name><surname>Ong</surname><given-names>K</given-names></name><name><surname>Varghese</surname><given-names>O</given-names></name><name><surname>Yang</surname><given-names>X</given-names></name><name><surname>Mor</surname><given-names>G</given-names></name><name><surname>Paulose</surname><given-names>M</given-names></name><name><surname>Dickey</surname><given-names>E</given-names></name><name><surname>Ruan</surname><given-names>C</given-names></name><name><surname>Pishko</surname><given-names>M</given-names></name><name><surname>Kendig</surname><given-names>J</given-names></name><name><surname>Mason</surname><given-names>A</given-names></name></person-group><article-title>A sentinel sensor network for hydrogen sensing</article-title><source>Sensors</source><year>2003</year><volume>3</volume><fpage>69</fpage><lpage>82</lpage><pub-id pub-id-type="doi">10.3390/s30300069</pub-id></citation></ref>
<ref id="b27-sensors-11-04335"><label>27.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Osornio-Rios</surname><given-names>RA</given-names></name><name><surname>Romero-Troncoso</surname><given-names>RJ</given-names></name><name><surname>Herrera-Ruiz</surname><given-names>G</given-names></name><name><surname>Castaneda-Miranda</surname><given-names>R</given-names></name></person-group><article-title>The application of reconfigurable logic to high speed CNC milling machines controllers</article-title><source>Control Eng. Pract</source><year>2008</year><volume>16</volume><fpage>674</fpage><lpage>684</lpage><pub-id pub-id-type="doi">10.1016/j.conengprac.2007.08.004</pub-id></citation></ref>
<ref id="b28-sensors-11-04335"><label>28.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Fan</surname><given-names>S</given-names></name><name><surname>Bicker</surname><given-names>R</given-names></name></person-group><article-title>Design and validation of an FPGA-based self-healing controller for hybrid machine tools</article-title><source>J. Adv. Mech. Sys</source><year>2010</year><volume>2</volume><fpage>99</fpage><lpage>107</lpage></citation></ref>
<ref id="b29-sensors-11-04335"><label>29.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Vela-Martinez</surname><given-names>L</given-names></name><name><surname>Jauregui-Correa</surname><given-names>JC</given-names></name><name><surname>Rodriguez</surname><given-names>E</given-names></name><name><surname>Alvarez-Ramirez</surname><given-names>J</given-names></name></person-group><article-title>Using detrended fluctuation analysis to monitor chattering in cutter tool machines</article-title><source>Int. J. Mach. Tool Manu</source><year>2010</year><volume>50</volume><fpage>651</fpage><lpage>657</lpage><pub-id pub-id-type="doi">10.1016/j.ijmachtools.2010.03.012</pub-id></citation></ref>
<ref id="b30-sensors-11-04335"><label>30.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Won</surname><given-names>S-HP</given-names></name><name><surname>Melek</surname><given-names>WW</given-names></name><name><surname>Golnaraghi</surname><given-names>F</given-names></name></person-group><article-title>A Kalman/Particle filter-based position and orientation estimation method using a position sensor/inertial measurement unit hybrid system</article-title><source>IEEE Trans. Ind. Electron</source><year>2010</year><volume>57</volume><fpage>1787</fpage><lpage>1798</lpage><pub-id pub-id-type="doi">10.1109/TIE.2009.2032431</pub-id></citation></ref>
<ref id="b31-sensors-11-04335"><label>31.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Marsland</surname><given-names>S</given-names></name></person-group><source>Machine Learning: An Algorithmic Perspective</source><edition>1st ed</edition><publisher-name>Chapman and Hall/CRC</publisher-name><publisher-loc>Boca Raton, FL, USA</publisher-loc><year>2009</year><fpage>356</fpage><lpage>359</lpage></citation></ref>
<ref id="b32-sensors-11-04335"><label>32.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Vachhani</surname><given-names>L</given-names></name><name><surname>Sridharan</surname><given-names>K</given-names></name><name><surname>Meher</surname><given-names>PK</given-names></name></person-group><article-title>Efficient FPGA realization of CORDIC with application to robotic exploration</article-title><source>IEEE Trans. Ind. Electron</source><year>2009</year><volume>56</volume><fpage>4915</fpage><lpage>4929</lpage><pub-id pub-id-type="doi">10.1109/TIE.2009.2026225</pub-id></citation></ref>
<ref id="b33-sensors-11-04335"><label>33.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Siciliano</surname><given-names>B</given-names></name><name><surname>Khatib</surname><given-names>O</given-names></name></person-group><source>Springer Hand Book of Robotics</source><edition>1st ed</edition><publisher-name>Springer</publisher-name><publisher-loc>London, UK</publisher-loc><year>2008</year><fpage>87</fpage><lpage>108</lpage></citation></ref>
<ref id="b34-sensors-11-04335"><label>34.</label><citation citation-type="book"><source>LIS3L02AS4 Data Sheet</source><publisher-name>STMicroelectronics</publisher-name><publisher-loc>Carrolton, TX, USA</publisher-loc><year>2004</year></citation></ref>
<ref id="b35-sensors-11-04335"><label>35.</label><citation citation-type="book"><source>Texas Instruments Data Sheet ADS7841 (12-Bit, 4-Channel Serial Output Sampling Analogto-Digital Converter)</source><comment>MSDS No. ADS7841</comment><publisher-name>Texas Instruments Inc.</publisher-name><publisher-loc>Dallas, TX, USA</publisher-loc><comment>Available online: <ext-link xlink:href="www.datasheetcatalog.org/datasheet/texasinstruments/ads7841.pdf" ext-link-type="uri">www.datasheetcatalog.org/datasheet/texasinstruments/ads7841.pdf</ext-link> (accessed on 21 January 2011)</comment></citation></ref>
<ref id="b36-sensors-11-04335"><label>36.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Zanotto</surname><given-names>V</given-names></name><name><surname>Gaspareto</surname><given-names>A</given-names></name><name><surname>Lanzutti</surname><given-names>A</given-names></name><name><surname>Boscariol</surname><given-names>P</given-names></name><name><surname>Vidoni</surname><given-names>R</given-names></name></person-group><article-title>Experimental validation of minimus time-jerk algorithms for industrial robots</article-title><source>J Intell Robot Syst</source><year>2010</year><pub-id pub-id-type="doi">10.1007/s10846-010-9533-5.</pub-id></citation></ref></ref-list>
<sec sec-type="display-objects">
<title>Figures and Tables</title>
<fig id="f1-sensors-11-04335" position="float">
<label>Figure 1.</label>
<caption>
<p>Sensor network location on the robot. <bold>(a)</bold> Accelerometer placement. <bold>(b)</bold> Schematic showing the parameters that describe the robot.</p></caption>
<graphic xlink:href="sensors-11-04335f1.gif"/></fig>
<fig id="f2-sensors-11-04335" position="float">
<label>Figure 2.</label>
<caption>
<p>Flow diagram to estimate forward kinematics.</p></caption>
<graphic xlink:href="sensors-11-04335f2.gif"/></fig>
<fig id="f3-sensors-11-04335" position="float">
<label>Figure 3.</label>
<caption>
<p>Sensor network and the FPGA-based forward kinematics smart processor.</p></caption>
<graphic xlink:href="sensors-11-04335f3.gif"/></fig>
<fig id="f4-sensors-11-04335" position="float">
<label>Figure 4.</label>
<caption>
<p>Basic fused smart sensor.</p></caption>
<graphic xlink:href="sensors-11-04335f4.gif"/></fig>
<fig id="f5-sensors-11-04335" position="float">
<label>Figure 5.</label>
<caption>
<p>Forward kinematics hardware structure.</p></caption>
<graphic xlink:href="sensors-11-04335f5.gif"/></fig>
<fig id="f6-sensors-11-04335" position="float">
<label>Figure 6.</label>
<caption>
<p>Real-operation-oriented paths.</p></caption>
<graphic xlink:href="sensors-11-04335f6.gif"/></fig>
<fig id="f7-sensors-11-04335" position="float">
<label>Figure 7.</label>
<caption>
<p>Experimental setup.</p></caption>
<graphic xlink:href="sensors-11-04335f7.gif"/></fig>
<fig id="f8-sensors-11-04335" position="float">
<label>Figure 8.</label>
<caption>
<p>Monitored sensor network signals for the case of a circle path. <bold>(a)</bold> Encoder signals. <bold>(b)</bold> Accelerometer signals.</p></caption>
<graphic xlink:href="sensors-11-04335f8.gif"/></fig>
<fig id="f9-sensors-11-04335" position="float">
<label>Figure 9.</label>
<caption>
<p>Filtered accelerometer signals.</p></caption>
<graphic xlink:href="sensors-11-04335f9.gif"/></fig>
<fig id="f10-sensors-11-04335" position="float">
<label>Figure 10.</label>
<caption>
<p>Angular position obtained with accelerometer and encoder, and fused estimation.</p></caption>
<graphic xlink:href="sensors-11-04335f10.gif"/></fig>
<fig id="f11-sensors-11-04335" position="float">
<label>Figure 11.</label>
<caption>
<p>Monitored controller errors for each joint in the case of <bold>(a)</bold> circle path, <bold>(b)</bold> square path and <bold>(c)</bold> zigzag path.</p></caption>
<graphic xlink:href="sensors-11-04335f11.gif"/></fig>
<fig id="f12-sensors-11-04335" position="float">
<label>Figure 12.</label>
<caption>
<p>Each-joint forward kinematics <bold>(a)</bold> position, <bold>(b)</bold> orientation.</p></caption>
<graphic xlink:href="sensors-11-04335f12.gif"/></fig>
<fig id="f13-sensors-11-04335" position="float">
<label>Figure 13.</label>
<caption>
<p>Analytical and estimated measures for welding and painting paths. <bold>(a)</bold> circle path, <bold>(b)</bold> square path, <bold>(c)</bold> zigzag path. Position error for <bold>(d)</bold> circle path, <bold>(e)</bold> square path and <bold>(f)</bold> zigzag path.</p></caption>
<graphic xlink:href="sensors-11-04335f13.gif"/></fig>
<fig id="f14-sensors-11-04335" position="float">
<label>Figure 14.</label>
<caption>
<p>Monitored end effector orientation for welding and painting paths, <bold>(a)</bold> circle path, <bold>(b)</bold> square path, <bold>(c)</bold> zigzag path; Orientation errors for <bold>(d)</bold> circle path, <bold>(e)</bold> square path and <bold>(f)</bold> zigzag path.</p></caption>
<graphic xlink:href="sensors-11-04335f14.gif"/></fig>
<table-wrap id="t1-sensors-11-04335" position="float">
<label>Table 1.</label>
<caption>
<p>Equations to estimate the angular position of each joint using accelerometers.</p></caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th align="center" valign="bottom"><bold>Joint</bold> <bold><italic>i</italic></bold></th>
<th align="center" valign="bottom"><bold>Equation</bold></th></tr></thead>
<tbody>
<tr>
<td align="center" valign="top">1</td>
<td align="center" valign="top"><italic>θ<sub>A</sub></italic><sub>1</sub> = <italic>θ<sub>E</sub></italic><sub>1</sub></td></tr>
<tr>
<td align="center" valign="top">2</td>
<td align="center" valign="top"><italic>θ<sub>A</sub></italic><sub>2</sub> <italic>= π −</italic> tan<sup>−1</sup>(<italic>A</italic><sub>1</sub><italic><sub>y</sub></italic>/<italic>A</italic><sub>1</sub><italic><sub>z</sub></italic>)</td></tr>
<tr>
<td align="center" valign="top">3</td>
<td align="center" valign="top"><italic>θ<sub>A</sub></italic><sub>3</sub> <italic>=</italic> tan<sup>−1</sup>(<italic>A</italic><sub>2</sub><italic><sub>x</sub></italic>/<italic>A</italic><sub>2</sub><italic><sub>z</sub></italic>)+ <italic>θ<sub>A</sub></italic><sub>2</sub> − <italic>π</italic></td></tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top"><italic>θ<sub>A</sub></italic><sub>4</sub> <italic>= π −</italic> tan<sup>−1</sup>(<italic>A</italic><sub>3</sub><italic><sub>x</sub></italic>/<italic>A</italic><sub>3</sub><italic><sub>z</sub></italic>)</td></tr>
<tr>
<td align="center" valign="top">5</td>
<td align="center" valign="top"><italic>θ<sub>A</sub></italic><sub>5</sub> <italic>= π −</italic> tan<sup>−1</sup>(<italic>A</italic><sub>4</sub><italic><sub>y</sub></italic>/<italic>A</italic><sub>4</sub><italic><sub>z</sub></italic>)− <italic>θ<sub>A</sub></italic><sub>3</sub> <italic>+ θ<sub>A</sub></italic><sub>2</sub></td></tr>
<tr>
<td align="center" valign="top">6</td>
<td align="center" valign="top"><italic>θ<sub>A</sub></italic><sub>6</sub> <italic>=</italic> tan<sup>−1</sup>(<italic>A</italic><sub>4</sub><italic><sub>x</sub></italic>/<italic>A</italic><sub>4</sub><italic><sub>z</sub></italic>)− <italic>π + θ<sub>A</sub></italic><sub>4</sub></td></tr></tbody></table></table-wrap>
<table-wrap id="t2-sensors-11-04335" position="float">
<label>Table 2.</label>
<caption>
<p>Link parameters of each joint.</p></caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th align="center" valign="middle"><italic>i</italic></th>
<th align="center" valign="middle"><italic>ϕ<sub>i</sub></italic><sub>−1</sub></th>
<th align="center" valign="middle"><italic>a<sub>i</sub></italic><sub>−1</sub></th>
<th align="center" valign="middle"><italic>d<sub>i</sub></italic></th>
<th align="center" valign="middle"><italic>θ<sub>i</sub></italic></th></tr></thead>
<tbody>
<tr>
<td align="center" valign="top">1</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top"><italic>d</italic><sub>1</sub></td>
<td align="center" valign="top"><italic>θ</italic><sub>1</sub> <italic>+ π</italic>/2</td></tr>
<tr>
<td align="center" valign="top">2</td>
<td align="center" valign="top"><italic>π</italic>/2</td>
<td align="center" valign="top"><italic>a</italic><sub>3</sub></td>
<td align="center" valign="top"><italic>d</italic><sub>2</sub></td>
<td align="center" valign="top"><italic>θ</italic><sub>2</sub> <italic>+ π</italic>/2</td></tr>
<tr>
<td align="center" valign="top">3</td>
<td align="center" valign="top"><italic>π</italic></td>
<td align="center" valign="top">0</td>
<td align="center" valign="top"><italic>d</italic><sub>3</sub></td>
<td align="center" valign="top"><italic>θ</italic><sub>3</sub></td></tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top"><italic>π</italic>/2</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top"><italic>d</italic><sub>4</sub></td>
<td align="center" valign="top"><italic>θ</italic><sub>4</sub></td></tr>
<tr>
<td align="center" valign="top">5</td>
<td align="center" valign="top"><italic>π</italic>/2</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top"><italic>θ</italic><sub>5</sub></td></tr>
<tr>
<td align="center" valign="top">6</td>
<td align="center" valign="top"><italic>π</italic>/2</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top"><italic>θ</italic><sub>6</sub></td></tr></tbody></table></table-wrap>
<table-wrap id="t3-sensors-11-04335" position="float">
<label>Table 3.</label>
<caption>
<p>FPGA resource usage.</p></caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th align="center" valign="bottom"><bold>Element</bold></th>
<th align="center" valign="bottom"><bold>Used</bold></th>
<th align="center" valign="bottom"><bold>Available</bold></th>
<th align="center" valign="bottom"><bold>Percentage (%)</bold></th></tr></thead>
<tbody>
<tr>
<td align="center" valign="top">Slices</td>
<td align="center" valign="top">9,464</td>
<td align="center" valign="top">14,752</td>
<td align="center" valign="top">64</td></tr>
<tr>
<td align="center" valign="top">Slice Flip-Flops</td>
<td align="center" valign="top">6,617</td>
<td align="center" valign="top">29,504</td>
<td align="center" valign="top">29</td></tr>
<tr>
<td align="center" valign="top">4-input LUTs</td>
<td align="center" valign="top">13,357</td>
<td align="center" valign="top">29,504</td>
<td align="center" valign="top">45</td></tr>
<tr>
<td align="center" valign="top">Multipliers</td>
<td align="center" valign="top">12</td>
<td align="center" valign="top">36</td>
<td align="center" valign="top">33</td></tr></tbody></table></table-wrap>
<table-wrap id="t4-sensors-11-04335" position="float">
<label>Table 4.</label>
<caption>
<p>Measured angular position errors for each joint, for a circle and a square paths.</p></caption>
<table frame="box" rules="all">
<thead>
<tr>
<th align="center" valign="middle" rowspan="2"><bold>Path</bold></th>
<th align="center" valign="middle" rowspan="2"><bold>Measured error</bold></th>
<th colspan="6" align="center" valign="bottom"><bold>Joint angular position errors</bold></th></tr>
<tr>
<th align="center" valign="bottom"><italic>ɛθ</italic><sub>1</sub></th>
<th align="center" valign="bottom"><italic>ɛθ</italic><sub>2</sub></th>
<th align="center" valign="bottom"><italic>ɛθ</italic><sub>3</sub></th>
<th align="center" valign="bottom"><italic>ɛθ</italic><sub>4</sub></th>
<th align="center" valign="bottom"><italic>ɛθ</italic><sub>5</sub></th>
<th align="center" valign="bottom"><italic>ɛθ</italic><sub>6</sub></th></tr></thead>
<tbody>
<tr>
<td align="center" valign="middle" rowspan="2">Circle</td>
<td align="center" valign="top">Absolute (rad)</td>
<td align="center" valign="top">0.007</td>
<td align="center" valign="top">0.010</td>
<td align="center" valign="top">0.005</td>
<td align="center" valign="top">0.014</td>
<td align="center" valign="top">0.018</td>
<td align="center" valign="top">0.023</td></tr>
<tr>
<td align="center" valign="top">Relative (%)</td>
<td align="center" valign="top">1.010</td>
<td align="center" valign="top">0.890</td>
<td align="center" valign="top">0.860</td>
<td align="center" valign="top">1.750</td>
<td align="center" valign="top">3.120</td>
<td align="center" valign="top">1.670</td></tr>
<tr>
<td align="center" valign="middle" rowspan="2">Square</td>
<td align="center" valign="top">Absolute (rad)</td>
<td align="center" valign="top">0.017</td>
<td align="center" valign="top">0.025</td>
<td align="center" valign="top">0.035</td>
<td align="center" valign="top">0.026</td>
<td align="center" valign="top">0.086</td>
<td align="center" valign="top">0.013</td></tr>
<tr>
<td align="center" valign="top">Relative (%)</td>
<td align="center" valign="top">2.240</td>
<td align="center" valign="top">2.880</td>
<td align="center" valign="top">7.100</td>
<td align="center" valign="top">3.180</td>
<td align="center" valign="top">14.840</td>
<td align="center" valign="top">0.860</td></tr>
<tr>
<td align="center" valign="middle" rowspan="2">Zigzag</td>
<td align="center" valign="top">Absolute (rad)</td>
<td align="center" valign="top">0.001</td>
<td align="center" valign="top">0.012</td>
<td align="center" valign="top">0.177</td>
<td align="center" valign="top">0.070</td>
<td align="center" valign="top">0.051</td>
<td align="center" valign="top">0.021</td></tr>
<tr>
<td align="center" valign="top">Relative (%)</td>
<td align="center" valign="top">0.100</td>
<td align="center" valign="top">1.290</td>
<td align="center" valign="top">1.950</td>
<td align="center" valign="top">7.430</td>
<td align="center" valign="top">1.640</td>
<td align="center" valign="top">0.190</td></tr></tbody></table></table-wrap>
<table-wrap id="t5-sensors-11-04335" position="float">
<label>Table 5.</label>
<caption>
<p>End effector measured errors in position and orientation for both circle and square path.</p></caption>
<table frame="box" rules="all">
<thead>
<tr>
<th colspan="2" align="center" valign="middle"><bold>End effector measured errors</bold></th>
<th align="center" valign="middle"><bold>Error type</bold></th>
<th align="center" valign="middle"><bold>Circle path</bold></th>
<th align="center" valign="middle"><bold>Square path</bold></th>
<th align="center" valign="middle"><bold>Zigzag path</bold></th></tr></thead>
<tbody>
<tr>
<td align="center" valign="middle" rowspan="6">Position error</td>
<td align="center" valign="middle" rowspan="2"><italic>ɛX</italic><sub>6</sub></td>
<td align="center" valign="top">Absolute (mm)</td>
<td align="center" valign="top">1.562</td>
<td align="center" valign="top">16.034</td>
<td colspan="2" align="center" valign="top">1.817</td></tr>
<tr>
<td align="center" valign="top">Relative (%)</td>
<td align="center" valign="top">0.200</td>
<td align="center" valign="top">2.580</td>
<td align="center" valign="top">0.230</td></tr>
<tr>
<td align="center" valign="middle" rowspan="2"><italic>ɛY</italic><sub>6</sub></td>
<td align="center" valign="top">Absolute (mm)</td>
<td align="center" valign="top">5.364</td>
<td align="center" valign="top">3.713</td>
<td align="center" valign="top">3.390</td></tr>
<tr>
<td align="center" valign="top">Relative (%)</td>
<td align="center" valign="top">1.070</td>
<td align="center" valign="top">0.930</td>
<td align="center" valign="top">0.420</td></tr>
<tr>
<td align="center" valign="middle" rowspan="2"><italic>ɛZ</italic><sub>6</sub></td>
<td align="center" valign="top">Absolute (mm)</td>
<td align="center" valign="top">6.303</td>
<td align="center" valign="top">29.379</td>
<td align="center" valign="top">2.568</td></tr>
<tr>
<td align="center" valign="top">Relative (%)</td>
<td align="center" valign="top">0.410</td>
<td align="center" valign="top">2.020</td>
<td align="center" valign="top">0.210</td></tr>
<tr>
<td align="center" valign="middle" rowspan="6">Orientation error</td>
<td align="center" valign="middle" rowspan="2"><italic>ɛα</italic><sub>6</sub></td>
<td align="center" valign="top">Absolute (rad)</td>
<td align="center" valign="top">0.029</td>
<td align="center" valign="top">0.036</td>
<td colspan="2" align="center" valign="top">0.015</td></tr>
<tr>
<td align="center" valign="top">Relative (%)</td>
<td align="center" valign="top">1.300</td>
<td align="center" valign="top">1.560</td>
<td align="center" valign="top">4.600</td></tr>
<tr>
<td align="center" valign="middle" rowspan="2"><italic>ɛβ</italic><sub>6</sub></td>
<td align="center" valign="top">Absolute (rad)</td>
<td align="center" valign="top">0.021</td>
<td align="center" valign="top">0.025</td>
<td align="center" valign="top">0.011</td></tr>
<tr>
<td align="center" valign="top">Relative (%)</td>
<td align="center" valign="top">3.550</td>
<td align="center" valign="top">4.380</td>
<td align="center" valign="top">6.590</td></tr>
<tr>
<td align="center" valign="middle" rowspan="2"><italic>ɛγ</italic><sub>6</sub></td>
<td align="center" valign="top">Absolute (rad)</td>
<td align="center" valign="top">0.020</td>
<td align="center" valign="top">0.137</td>
<td align="center" valign="top">0.006</td></tr>
<tr>
<td align="center" valign="top">Relative (%)</td>
<td align="center" valign="top">1.110</td>
<td align="center" valign="top">7.680</td>
<td align="center" valign="top">0.960</td></tr></tbody></table></table-wrap>
<table-wrap id="t6-sensors-11-04335" position="float">
<label>Table 6.</label>
<caption>
<p>Comparative of errors between encoder and fused encoder-acelerometer.</p></caption>
<table frame="box" rules="all">
<thead>
<tr>
<th align="center" valign="middle"><bold>Sensing method</bold></th>
<th align="center" valign="middle"><bold>Error X-axis</bold></th>
<th align="center" valign="middle"><bold>Error Y-axis</bold></th>
<th align="center" valign="middle"><bold>Error Z-axis</bold></th>
<th align="center" valign="middle"><bold>Error</bold> <italic>α</italic></th>
<th align="center" valign="middle"><bold>Error</bold> <italic>β</italic></th>
<th align="center" valign="middle"><bold>Error</bold> <italic>γ</italic></th></tr></thead>
<tbody>
<tr>
<td align="center" valign="middle">Fused Encoder and accelerometer</td>
<td align="center" valign="middle">1.94%</td>
<td align="center" valign="middle">3.81%</td>
<td align="center" valign="middle">0.75%</td>
<td align="center" valign="middle">29.36%</td>
<td align="center" valign="middle">13.85%</td>
<td align="center" valign="middle">53.01%</td></tr>
<tr>
<td align="center" valign="middle">Encoder</td>
<td align="center" valign="middle">2.59%</td>
<td align="center" valign="middle">9.47%</td>
<td align="center" valign="middle">4.00%</td>
<td align="center" valign="middle">30.15%</td>
<td align="center" valign="middle">55.70%</td>
<td align="center" valign="middle">60.81%</td></tr></tbody></table></table-wrap>
<table-wrap id="t7-sensors-11-04335" position="float">
<label>Table 7.</label>
<caption>
<p>Features comparative between the proposal and reported works.</p></caption>
<table frame="box" rules="all">
<thead>
<tr>
<th align="center" valign="bottom"><bold>Work</bold></th>
<th align="center" valign="bottom"><bold>Sensing Method</bold></th>
<th align="center" valign="bottom"><bold>Robot type</bold></th>
<th align="center" valign="bottom"><bold>DOF</bold></th>
<th align="center" valign="bottom"><bold>Position</bold></th>
<th align="center" valign="bottom"><bold>Orientation</bold></th>
<th align="center" valign="bottom"><bold>Online</bold></th></tr></thead>
<tbody>
<tr>
<td align="center" valign="middle">[<xref ref-type="bibr" rid="b6-sensors-11-04335">6</xref>]</td>
<td align="center" valign="middle">Vision sensor, gyroscopes and accelerometers</td>
<td align="center" valign="middle">2-link planar robot</td>
<td align="center" valign="middle">2</td>
<td align="center" valign="middle">YES</td>
<td align="center" valign="middle">NO</td>
<td align="center" valign="middle">YES</td></tr>
<tr>
<td align="center" valign="middle">[<xref ref-type="bibr" rid="b7-sensors-11-04335">7</xref>]</td>
<td align="center" valign="middle">Encoder, accelerometer and interferometer</td>
<td align="center" valign="middle">Linear robot</td>
<td align="center" valign="middle">1</td>
<td align="center" valign="middle">YES</td>
<td align="center" valign="middle">NO</td>
<td align="center" valign="middle">YES</td></tr>
<tr>
<td align="center" valign="middle">[<xref ref-type="bibr" rid="b12-sensors-11-04335">12</xref>]</td>
<td align="center" valign="middle">Accelerometer</td>
<td align="center" valign="middle">Parallel kinematic machine</td>
<td align="center" valign="middle">1</td>
<td align="center" valign="middle">YES</td>
<td align="center" valign="middle">NO</td>
<td align="center" valign="middle">YES</td></tr>
<tr>
<td align="center" valign="middle">[<xref ref-type="bibr" rid="b16-sensors-11-04335">16</xref>]</td>
<td align="center" valign="middle">Accelerometer, encoder</td>
<td align="center" valign="middle">6-DOF robot</td>
<td align="center" valign="middle">2</td>
<td align="center" valign="middle">YES</td>
<td align="center" valign="middle">NO</td>
<td align="center" valign="middle">NO</td></tr>
<tr>
<td align="center" valign="middle">[<xref ref-type="bibr" rid="b36-sensors-11-04335">36</xref>]</td>
<td align="center" valign="middle">Encoder</td>
<td align="center" valign="middle">3-axis Cartesian manipulator</td>
<td align="center" valign="middle">3</td>
<td align="center" valign="middle">YES</td>
<td align="center" valign="middle">NO</td>
<td align="center" valign="middle">NO</td></tr>
<tr>
<td align="center" valign="middle">This work</td>
<td align="center" valign="middle">Accelerometer, encoder</td>
<td align="center" valign="middle">6-DOF robot</td>
<td align="center" valign="middle">6</td>
<td align="center" valign="middle">YES</td>
<td align="center" valign="middle">YES</td>
<td align="center" valign="middle">YES</td></tr></tbody></table></table-wrap></sec></back></article>
