<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.1 20151215//EN" "http://jats.nlm.nih.gov/publishing/1.1/JATS-journalpublishing1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" article-type="research-article" dtd-version="1.1">
<front>
<journal-meta>
<journal-id journal-id-type="pmc">CMC</journal-id>
<journal-id journal-id-type="nlm-ta">CMC</journal-id>
<journal-id journal-id-type="publisher-id">CMC</journal-id>
<journal-title-group>
<journal-title>Computers, Materials &#x0026; Continua</journal-title>
</journal-title-group>
<issn pub-type="epub">1546-2226</issn>
<issn pub-type="ppub">1546-2218</issn>
<publisher>
<publisher-name>Tech Science Press</publisher-name>
<publisher-loc>USA</publisher-loc>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="publisher-id">15906</article-id>
<article-id pub-id-type="doi">10.32604/cmc.2021.015906</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Article</subject>
</subj-group>
</article-categories>
<title-group>
<article-title>Intelligent Autonomous-Robot Control for Medical Applications</article-title>
<alt-title alt-title-type="left-running-head">Intelligent Autonomous-Robot Control for Medical Applications</alt-title>
<alt-title alt-title-type="right-running-head">Intelligent Autonomous-Robot Control for Medical Applications</alt-title>
</title-group>
<contrib-group content-type="authors">
<contrib id="author-1" contrib-type="author">
<name name-style="western">
<surname>Farkh</surname>
<given-names>Rihem</given-names>
</name>
<xref ref-type="aff" rid="aff-1">1</xref><xref ref-type="aff" rid="aff-2">2</xref>
</contrib>
<contrib id="author-2" contrib-type="author" corresp="yes">
<name name-style="western">
<surname>Marouani</surname>
<given-names>Haykel</given-names>
</name>
<xref ref-type="aff" rid="aff-1">1</xref><email>hmarouani@ksu.edu.sa</email></contrib>
<contrib id="author-3" contrib-type="author">
<name name-style="western">
<surname>Jaloud</surname>
<given-names>Khaled Al</given-names>
</name>
<xref ref-type="aff" rid="aff-1">1</xref></contrib>
<contrib id="author-4" contrib-type="author">
<name name-style="western">
<surname>Alhuwaimel</surname>
<given-names>Saad</given-names>
</name>
<xref ref-type="aff" rid="aff-3">3</xref></contrib>
<contrib id="author-5" contrib-type="author">
<name name-style="western">
<surname>Quasim</surname>
<given-names>Mohammad Tabrez</given-names>
</name>
<xref ref-type="aff" rid="aff-4">4</xref></contrib>
<contrib id="author-6" contrib-type="author">
<name name-style="western">
<surname>Fouad</surname>
<given-names>Yasser</given-names>
</name>
<xref ref-type="aff" rid="aff-1">1</xref></contrib>
<aff id="aff-1"><label>1</label><institution>College of Engineering, Muzahimiyah Branch, King Saud University</institution>, <addr-line>Riyadh, 11451</addr-line>, <country>Saudi Arabia</country></aff>
<aff id="aff-2"><label>2</label><institution>Laboratory for Analysis, Conception and Control of Systems, Department of Electrical Engineering, National Engineering School of Tunis, Tunis El Manar University</institution>, <addr-line>1002</addr-line>, <country>Tunisia</country></aff>
<aff id="aff-3"><label>3</label><institution>King Abdulaziz City for Science and Technology</institution>, <addr-line>Riyadh, 12354</addr-line>, <country>Saudi Arabia</country></aff>
<aff id="aff-4"><label>4</label><institution>College of Computing and Information Technology, University of Bisha</institution>, <addr-line>Bisha, 67714</addr-line>, <country>Saudi Arabia</country></aff>
</contrib-group>
<author-notes><corresp id="cor1">&#x002A;Corresponding Author: Haykel Marouani. Email: <email>hmarouani@ksu.edu.sa</email></corresp></author-notes>
<pub-date pub-type="epub" date-type="pub" iso-8601-date="2021-03-05">
<day>05</day>
<month>03</month>
<year>2021</year>
</pub-date>
<volume>68</volume>
<issue>2</issue>
<fpage>2189</fpage>
<lpage>2203</lpage>
<history>
<date date-type="received">
<day>13</day>
<month>12</month>
<year>2020</year>
</date>
<date date-type="accepted">
<day>28</day>
<month>02</month>
<year>2021</year>
</date>
</history>
<permissions>
<copyright-statement>&#x00A9; 2021 Farkh et al.</copyright-statement>
<copyright-year>2021</copyright-year>
<copyright-holder>Farkh et al.</copyright-holder>
<license xlink:href="https://creativecommons.org/licenses/by/4.0/">
<license-p>This work is licensed under a <ext-link ext-link-type="uri" xlink:type="simple" xlink:href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</ext-link>, which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited.</license-p>
</license>
</permissions>
<self-uri content-type="pdf" xlink:href="TSP_CMC_15906.pdf"></self-uri>
<abstract>
<p>The COVID-19 pandemic has shown that there is a lack of healthcare facilities to cope with a pandemic. This has also underscored the immediate need to rapidly develop hospitals capable of dealing with infectious patients and to rapidly change in supply lines to manufacture the prescription goods (including medicines) that is needed to prevent infection and treatment for infected patients. The COVID-19 has shown the utility of intelligent autonomous robots that assist human efforts to combat a pandemic. The artificial intelligence based on neural networks and deep learning can help to fight COVID-19 in many ways, particularly in the control of autonomous medic robots. Health officials aim to curb the spread of COVID-19 among medical, nursing staff and patients by using intelligent robots. We propose an advanced controller for a service robot to be used in hospitals. This type of robot is deployed to deliver food and dispense medications to individual patients. An autonomous line-follower robot that can sense and follow a line drawn on the floor and drive through the rooms of patients with control of its direction. These criteria were met by using two controllers simultaneously: a deep neural network controller to predict the trajectory of movement and a proportional-integral-derivative (PID) controller for automatic steering and speed control.</p>
</abstract>
<kwd-group kwd-group-type="author">
<kwd>Autonomous medic robots</kwd>
<kwd>PID control</kwd>
<kwd>neural network control system</kwd>
<kwd>real-time implementation</kwd>
<kwd>navigation environment</kwd>
<kwd>differential drive system</kwd>
</kwd-group>
</article-meta>
</front>
<body>
<sec id="s1">
<label>1</label>
<title>Introduction</title>
<p>The use of robotics, automation applications, and artificial intelligence in public healthcare is growing daily [<xref ref-type="bibr" rid="ref-1">1</xref>&#x2013;<xref ref-type="bibr" rid="ref-3">3</xref>]. Robots support doctors and medical personnel to perform complicated functions with accuracy, and to reduce the workload of medical staff, improving the efficacy of healthcare services [<xref ref-type="bibr" rid="ref-4">4</xref>]. To minimize the spread of COVID-19, several work functions have been allocated to robots, such as cleaning and food processing jobs in contaminated areas [<xref ref-type="bibr" rid="ref-5">5</xref>]. In hospitals, service robots are versions of mobile robots with high payload capability but restricted degrees of freedom (<xref ref-type="fig" rid="fig-1">Fig. 1</xref>). However, surgical robots are precise, flexible, and reliable systems with a minimal error margin, typically within millimeters [<xref ref-type="bibr" rid="ref-6">6</xref>,<xref ref-type="bibr" rid="ref-7">7</xref>].</p>
<fig id="fig-1">
<label>Figure 1</label>
<caption>
<title>Line-follower service robots</title>
</caption><graphic mimetype="image" mime-subtype="png" xlink:href="fig-1.png"/>
</fig>
<p>Mobile robots are machines controlled by software and integrated sensors, including infrared, ultrasonic, webcam, GPS, and magnetic sensors, and they can move from one location to another to perform complex tasks [<xref ref-type="bibr" rid="ref-8">8</xref>]. Wheels and DC motors are used to move robots [<xref ref-type="bibr" rid="ref-9">9</xref>]. In addition to their use in healthcare, mobile robots are used in agricultural, industrial, military, and search and rescue applications, helping humans to accomplish complicated tasks [<xref ref-type="bibr" rid="ref-10">10</xref>]. Line-follower robots can be used in many industrial logistics applications, such as the transport of heavy and dangerous materials, the agriculture sector, and library inventory management systems. These robots are also capable of monitoring patients in hospitals and warning doctors of concerning symptoms [<xref ref-type="bibr" rid="ref-11">11</xref>].</p>
<p>A growing number of researchers have focused on smart-vehicle navigation because traditional tracking techniques are limited due to the environmental instability under which a vehicle moves. Therefore, intelligent control mechanisms, such as neural networks, are needed. They solve the problem of vehicle navigation by using their ability to learn the non-linear relationship between input and sensor values. A combination of computer vision techniques and machine learning algorithms is necessary for autonomous robots to develop &#x201C;true consciousness&#x201D; [<xref ref-type="bibr" rid="ref-12">12</xref>]. Several attempts have been made to improve low-cost autonomous cars using different neural network configurations. For example, the use of convolutional neural networks (CNNs) has been proposed for self-driving vehicles [<xref ref-type="bibr" rid="ref-13">13</xref>]. A collision prediction system has been constructed that combines a CNN with a method of stopping a robot in the vicinity of the target point while avoiding a moving obstacle [<xref ref-type="bibr" rid="ref-14">14</xref>]. CNNs have also been proposed for autonomous driving control systems to keep robots in their allocated lanes [<xref ref-type="bibr" rid="ref-15">15</xref>]. A multilayer perceptron network, which was implemented on a PC with an Intel Pentium 350 MHz processor, has been used for mobile-robot motion planning [<xref ref-type="bibr" rid="ref-16">16</xref>]. In another study, the problem of navigating a mobile robot was solved using a local neural network model [<xref ref-type="bibr" rid="ref-17">17</xref>].</p>
<p>Several motion control methods have been proposed for autonomous robots: proportional-integral-derivative (PID) control, fuzzy control, neural network control, and combinations of these control algorithms [<xref ref-type="bibr" rid="ref-18">18</xref>]. PID control is used by most motion control applications, and PID control methods have been extended with deep-learning techniques to achieve better performance and higher adaptability. High-end robotics with dynamic and reasonably accurate movement often require these control algorithms for operation. For example, a fuzzy PID controller has been used for a differential drive autonomous mobile-robot trajectory application [<xref ref-type="bibr" rid="ref-19">19</xref>]. A PID controller has also been designed to enable a laser sensor-based mobile robot to detect obstacles and avoid them [<xref ref-type="bibr" rid="ref-20">20</xref>].</p>
<p>In this paper, we outline the construction of a low-cost PID controller combined with a multilayer feed-forward network based on a back-propagation training algorithm using the Arduino controller board for the smooth control of an autonomous line-follower robot.</p>
</sec>
<sec id="s2">
<label>2</label>
<title>Autonomous Line-Follower Robot Architecture</title>
<p>In this section, the architecture and system block diagram for the line-follower robot are described. First, a suitable configuration was selected to develop a line-follower robot using three infrared sensors connected through the Arduino Uno microcontroller board to the motor driver integrated circuit (IC). This configuration is illustrated in the block diagram shown in <xref ref-type="fig" rid="fig-2">Fig. 2</xref>.</p>
<fig id="fig-2">
<label>Figure 2</label>
<caption>
<title>Block diagram of the medic line-follower robot</title>
</caption><graphic mimetype="image" mime-subtype="png" xlink:href="fig-2.png"/>
</fig>
<p>Implementing the system on the Arduino Uno ensured that the robot moved in the desired direction; the infrared sensors were read for line detection; error was predicted; the speed of the left and the right motors was determined using a PID controller and the predicted error; and the line-follower robot operated by reading the infrared sensors and controlling the four DC motors.</p>
<sec id="s2_1">
<label>2.1</label>
<title>Mobile Robot Construction</title>
<p>The proposed autonomous-robot design (<xref ref-type="fig" rid="fig-3">Fig. 3</xref>) can easily be modified and adapted to new research studies. The physical appearance of the robot was evaluated, and its design was based on several criteria, including functionality, material availability, and mobility.</p>
<p>Seven part types were used in the construction of the robot:
<list list-type="order">
<list-item><p>Four wheels.</p></list-item>
<list-item><p>Four DC motors.</p></list-item>
<list-item><p>Two base structures.</p></list-item>
<list-item><p>A controller board based on the Arduino ATmega 32 board.</p></list-item>
<list-item><p>An L298N IC circuit for DC-motor driving.</p></list-item>
<list-item><p>An expansion board.</p></list-item>
<list-item><p>Line-tracking module.</p></list-item>
</list></p>
<fig id="fig-3">
<label>Figure 3</label>
<caption>
<title>Medic line-follower robot prototype</title>
</caption><graphic mimetype="image" mime-subtype="png" xlink:href="fig-3.png"/>
</fig>
</sec>
<sec id="s2_2">
<label>2.2</label>
<title>Arduino Uno Microcontroller</title>
<p>The Arduino Uno is a microcontroller board based on the ATmega328P (<xref ref-type="fig" rid="fig-4">Fig. 4</xref>). It has 14 digital I/O pins, six analog inputs that can be used as pulse width modulation (PWM) outputs, a USB connector, a power jack, an ICSP header, a reset button, and a 16-MHz quartz crystal. The Arduino microcontroller board is suitable for driving a PWM signal for the DC motor [<xref ref-type="bibr" rid="ref-21">21</xref>].</p>
<fig id="fig-4">
<label>Figure 4</label>
<caption>
<title>Arduino Uno based on the ATmega328P</title>
</caption><graphic mimetype="image" mime-subtype="png" xlink:href="fig-4.png"/>
</fig>
</sec>
<sec id="s2_3">
<label>2.3</label>
<title>Tracking Sensor</title>
<p>The line-tracking sensor used is capable of detecting white lines on black, and black lines on white (<xref ref-type="fig" rid="fig-5">Fig. 5</xref>). The single line-tracking signal provides a stable output TTL signal for more accurate and more stable line tracking. Multi-channel operation can easily be achieved by installing the necessary line-tracking robot sensors [<xref ref-type="bibr" rid="ref-22">22</xref>].</p>
<p><bold>Specifications:</bold></p>
<p>Power Supply: +5 V, operating Current: &#x003C; 10 mA</p>
<p>Operating temperature range: 0<inline-formula id="ieqn-1"><!--<alternatives><inline-graphic xlink:href="ieqn-1.png"/>--><!--<tex-math id="tex-ieqn-1"><![CDATA[$^\circ$]]></tex-math>--><mml:math id="mml-ieqn-1"><mml:msup><mml:mrow></mml:mrow><mml:mrow><mml:mo>&#x2218;</mml:mo></mml:mrow></mml:msup></mml:math><!--</alternatives>--></inline-formula>C to + 50<inline-formula id="ieqn-2"><!--<alternatives><inline-graphic xlink:href="ieqn-2.png"/>--><!--<tex-math id="tex-ieqn-2"><![CDATA[$^\circ$]]></tex-math>--><mml:math id="mml-ieqn-2"><mml:msup><mml:mrow></mml:mrow><mml:mrow><mml:mo>&#x2218;</mml:mo></mml:mrow></mml:msup></mml:math><!--</alternatives>--></inline-formula>C</p>
<p>Output Interface: Three-wire interface (1&#x2014;signal, 2&#x2014;power, and 3&#x2014;power supply negative) output Level: TTL level.</p>
<fig id="fig-5">
<label>Figure 5</label>
<caption>
<title>Tracking sensor</title>
</caption><graphic mimetype="image" mime-subtype="png" xlink:href="fig-5.png"/>
</fig>
</sec>
<sec id="s2_4">
<label>2.4</label>
<title>L298N Motor Driver</title>
<p>The L298N motor driver, which consists of two complete H-bridge circuits, is capable of driving a pair of DC motors. This function makes it suitable for use in robotics because most robots run on two or four driven wheels with a power current of up to 2A and a voltage from 5 to 35V DC. <xref ref-type="fig" rid="fig-6">Fig. 6</xref> shows the pin assignments for the L298N dual H-bridge module. IN1 and IN2 on the L298N board are used to control the direction. The PWM signal was sent to the Enable pin of the L298N board, which drives the motor [<xref ref-type="bibr" rid="ref-22">22</xref>].</p>
<fig id="fig-6">
<label>Figure 6</label>
<caption>
<title>L298N IC motor driver</title>
</caption><graphic mimetype="image" mime-subtype="png" xlink:href="fig-6.png"/>
</fig>
<p><xref ref-type="fig" rid="fig-7">Fig. 7</xref> shows a diagram indicating the wire connections used for the design and implementation of the mobile robot. This diagram includes the embedded system, line-tracking sensors, DC motors, and L298 IC circuit for driving the motors.</p>
<fig id="fig-7">
<label>Figure 7</label>
<caption>
<title>Connection wires</title>
</caption><graphic mimetype="image" mime-subtype="png" xlink:href="fig-7.png"/>
</fig>
</sec>
</sec>
<sec id="s3">
<label>3</label>
<title>Neural Network-Based PID Controller for a Line-Follower Robot</title>
<p>A neural network-based PID controller was designed to control the robot. The sensors were numbered from left to right. An error value of zero referred to the robot being precisely on the center of the line. A positive error value meant that the robot had deviated to the left, and a negative error value meant that the robot had deviated to the right. The error value can be a maximum of <inline-formula id="ieqn-3"><!--<alternatives><inline-graphic xlink:href="ieqn-3.png"/>--><!--<tex-math id="tex-ieqn-3"><![CDATA[$\pm$]]></tex-math>--><mml:math id="mml-ieqn-3"><mml:mo>&#x00B1;</mml:mo></mml:math><!--</alternatives>--></inline-formula>2, which corresponds to the maximum deviation (<xref ref-type="fig" rid="fig-8">Fig. 8</xref>).</p>
<fig id="fig-8">
<label>Figure 8</label>
<caption>
<title>Errors and sensor positions</title>
</caption><graphic mimetype="image" mime-subtype="png" xlink:href="fig-8.png"/>
</fig>
<p>The primary advantage of this approach is that the three sensor readings are replaced with a single error term, which can be fed to the controller to compute the motor speeds so that the error term becomes zero. The output of the tracking line sensor array is fed to the neural network, which calculates and estimates the error term from the sensor values.</p>
<p>The estimated error input was used by the PID controller to generate new output values. The output value was used to determine the left speed and right speed for the two motors on the line-follower robot.</p>
<p><xref ref-type="fig" rid="fig-9">Fig. 9</xref> shows the control algorithm used for the line-follower robot.</p>
<fig id="fig-9">
<label>Figure 9</label>
<caption>
<title>Mobile robot motion-control-based proportional-integral-derivative (PID) neural network controller</title>
</caption><graphic mimetype="image" mime-subtype="png" xlink:href="fig-9.png"/>
</fig>
<sec id="s3_1">
<label>3.1</label>
<title>PID Controller</title>
<p>The objective of a PID controller is to keep an input variable close to the desired set-point by adjusting an output. Its performance can be &#x201C;tuned&#x201D; by adjusting three parameters: <italic>K<sub>P</sub></italic>, <italic>K<sub>I</sub></italic>, and <italic>K<sub>D</sub></italic>. The well-known PID controller equation is shown here in continuous form:</p>
<p><disp-formula id="eqn-1">
<label>(1)</label>
<!--<alternatives><graphic mimetype="image" mime-subtype="png" xlink:href="eqn-1.png"/>-->
<!--<tex-math id="tex-eqn-1"><![CDATA[$$\begin{equation}
U_{c} \left(t\right)=Kp\hspace{0pt}\,e \left(t\right)+Ki\int e \left(t\right)dt+Kd\frac{de \left(t\right)}{dt},
 \label{eqn-1}
\end{equation}$$]]></tex-math>-->
<mml:math id="mml-eqn-1" display="block"><mml:msub><mml:mrow><mml:mi>U</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>K</mml:mi><mml:mi>p</mml:mi><mml:mspace width="0.0pt"/><mml:mspace width="0.3em"/><mml:mi>e</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:mi>K</mml:mi><mml:mi>i</mml:mi><mml:mo>&#x222B; </mml:mo><mml:mi>e</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mi>d</mml:mi><mml:mi>t</mml:mi><mml:mo>+</mml:mo><mml:mi>K</mml:mi><mml:mi>d</mml:mi><mml:mfrac><mml:mrow><mml:mi>d</mml:mi><mml:mi>e</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mi>d</mml:mi><mml:mi>t</mml:mi></mml:mrow></mml:mfrac><mml:mo>,</mml:mo></mml:math><!--</alternatives>--></disp-formula></p>
<p>where Kp, Ki, and Kd refer to proportional, integral, and derivative gain constants, respectively.</p>
<p>For implementation in a discrete form, the controller equation is modified using the backward Euler method for numerical integration, as in</p>
<p><disp-formula id="eqn-2">
<label>(2)</label>
<!--<alternatives><graphic mimetype="image" mime-subtype="png" xlink:href="eqn-2.png"/>-->
<!--<tex-math id="tex-eqn-2"><![CDATA[$$\begin{equation}
U \left(kT\right)=K_{p}\,e \left(kT\right)+K_{i}T\sum_{k}^{n}e \left(kT\right)+K{}_{d}^{}{\frac{\,e \left(kT\right)-e \left(kT-T\right)}{T}}{},
 \label{eqn-2}
\end{equation}$$]]></tex-math>-->
<mml:math id="mml-eqn-2" display="block"><mml:mi>U</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>k</mml:mi><mml:mi>T</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>K</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi></mml:mrow></mml:msub><mml:mspace width="0.3em"/><mml:mi>e</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>k</mml:mi><mml:mi>T</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:msub><mml:mrow><mml:mi>K</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mi>T</mml:mi><mml:mstyle displaystyle='true'><mml:mstyle displaystyle='true'><mml:munderover><mml:mrow><mml:mo>&#x2211;</mml:mo> </mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:munderover></mml:mstyle></mml:mstyle><mml:mi>e</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>k</mml:mi><mml:mi>T</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:msubsup><mml:mrow><mml:mi>K</mml:mi></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow><mml:mrow></mml:mrow></mml:msubsup><mml:mfrac><mml:mrow><mml:mspace width="0.3em"/><mml:mi>e</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>k</mml:mi><mml:mi>T</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>-</mml:mo><mml:mi>e</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>k</mml:mi><mml:mi>T</mml:mi><mml:mo>-</mml:mo><mml:mi>T</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:mfrac><mml:mo>,</mml:mo></mml:math><!--</alternatives>--></disp-formula></p>
<p>where u(kT) and e(kT) are control and error signals in discrete time at T sampling time.</p>
<p>The PID controller determines both the left and right motor speeds following a predicted error measurement of the sensor. The PID controller generates a control signal (PID value), which is used to determine the left and right speeds of the robot wheels. This is a differential drive system, in which a left turn can be executed if the speed of the left motor is reduced, and a right turn is executed if the speed of the right motor is reduced. Right_Speed and Left_Speed are calculated using <xref ref-type="disp-formula" rid="eqn-3">Eq. (3)</xref>:</p>
<p><disp-formula id="eqn-3">
<label>(3)</label>
<!--<alternatives><graphic mimetype="image" mime-subtype="png" xlink:href="eqn-3.png"/>-->
<!--<tex-math id="tex-eqn-3"><![CDATA[$$\begin{equation}
\begin{array}{l}\mathit{Right}\_\mathit{Speed}=Base\_\mathit{speed}~ -~ PID\_\mathit{value} \\ Left\_\mathit{Speed}=Base\_\mathit{speed}~ +PID\_\mathit{value}\end{array}.
 \label{eqn-3}
\end{equation}$$]]></tex-math>-->
<mml:math id="mml-eqn-3" display="block"><mml:mtable equalrows="false" columnlines="" equalcolumns="false"><mml:mtr><mml:mtd columnalign="left"><mml:mstyle mathvariant="italic"><mml:mi>R</mml:mi><mml:mi>i</mml:mi><mml:mi>g</mml:mi><mml:mi>h</mml:mi><mml:mi>t</mml:mi></mml:mstyle><mml:mstyle><mml:mtext>_</mml:mtext></mml:mstyle><mml:mstyle mathvariant="italic"><mml:mi>S</mml:mi><mml:mi>p</mml:mi><mml:mi>e</mml:mi><mml:mi>e</mml:mi><mml:mi>d</mml:mi></mml:mstyle><mml:mo>=</mml:mo><mml:mi>B</mml:mi><mml:mi>a</mml:mi><mml:mi>s</mml:mi><mml:mi>e</mml:mi><mml:mstyle><mml:mtext>_</mml:mtext></mml:mstyle><mml:mstyle mathvariant="italic"><mml:mi>s</mml:mi><mml:mi>p</mml:mi><mml:mi>e</mml:mi><mml:mi>e</mml:mi><mml:mi>d</mml:mi></mml:mstyle><mml:mspace width=".3em" /><mml:mo>-</mml:mo><mml:mspace width=".3em" /><mml:mi>P</mml:mi><mml:mi>I</mml:mi><mml:mi>D</mml:mi><mml:mstyle><mml:mtext>_</mml:mtext></mml:mstyle><mml:mstyle mathvariant="italic"><mml:mi>v</mml:mi><mml:mi>a</mml:mi><mml:mi>l</mml:mi><mml:mi>u</mml:mi><mml:mi>e</mml:mi></mml:mstyle></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mi>L</mml:mi><mml:mi>e</mml:mi><mml:mi>f</mml:mi><mml:mi>t</mml:mi><mml:mstyle><mml:mtext>_</mml:mtext></mml:mstyle><mml:mstyle mathvariant="italic"><mml:mi>S</mml:mi><mml:mi>p</mml:mi><mml:mi>e</mml:mi><mml:mi>e</mml:mi><mml:mi>d</mml:mi></mml:mstyle><mml:mo>=</mml:mo><mml:mi>B</mml:mi><mml:mi>a</mml:mi><mml:mi>s</mml:mi><mml:mi>e</mml:mi><mml:mstyle><mml:mtext>_</mml:mtext></mml:mstyle><mml:mstyle mathvariant="italic"><mml:mi>s</mml:mi><mml:mi>p</mml:mi><mml:mi>e</mml:mi><mml:mi>e</mml:mi><mml:mi>d</mml:mi></mml:mstyle><mml:mspace width=".3em" /><mml:mo>+</mml:mo><mml:mi>P</mml:mi><mml:mi>I</mml:mi><mml:mi>D</mml:mi><mml:mstyle><mml:mtext>_</mml:mtext></mml:mstyle><mml:mstyle mathvariant="italic"><mml:mi>v</mml:mi><mml:mi>a</mml:mi><mml:mi>l</mml:mi><mml:mi>u</mml:mi><mml:mi>e</mml:mi></mml:mstyle></mml:mtd></mml:mtr></mml:mtable><mml:mo>.</mml:mo></mml:math><!--</alternatives>--></disp-formula></p>
<p>Right_Speed and Left_Speed are used to control the duty cycle of the PWM applied at the input pins of the motor driver IC. PID constants (Kp, Ki, Kd) were obtained using the  Ziegler&#x2013;Nichols tuning method (<xref ref-type="table" rid="table-1">Tab. 1</xref>) [<xref ref-type="bibr" rid="ref-23">23</xref>]. Initially, the Ki and Kd of the system were set to 0. Kp was then increased from 0 until it reached the ultimate gain Ku, and at this point, the robot continuously oscillated. Ku and Tu (oscillation period) are then used to tune the PID (see <xref ref-type="table" rid="table-1">Tab. 1</xref>).</p>
<table-wrap id="table-1">
<label>Table 1</label>
<caption>
<title>Proportional-integral-derivative tuning parameters for controlling a mobile robot</title>
</caption>
<table>
<colgroup>
<col/>
<col/>
<col/>
<col/>
</colgroup>
<thead>
<tr>
<th></th>
<th colspan="3">Tuning parameters</th>
</tr>
<tr>
<th><bold>Rule name</bold></th>
<th><bold>Kp</bold></th>
<th><bold>Ki</bold></th>
<th><bold>Kd</bold></th>
</tr>
</thead>
<tbody>
<tr>
<td>Classic Ziegler&#x2013;Nichols</td>
<td>0.6 Ku</td>
<td>2 Kp/Tu</td>
<td>KpTu/8</td>
</tr>
<tr>
<td>Pessen Integral Rule</td>
<td>0.7 Ku</td>
<td>2.5 Kp/Tu</td>
<td>0.15 KpTu</td>
</tr>
<tr>
<td>Some Overshoot</td>
<td>0.33 Ku</td>
<td>2 Kp/Tu</td>
<td>KpTu/3</td>
</tr>
<tr>
<td>No Overshoot</td>
<td>0.2 Ku</td>
<td>2 Kp/Tu</td>
<td>KpTu/3</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>After substantial testing, using a classical PID controller was deemed unsuitable for the line-follower robot because of the changes in line curvature. Therefore, only the last three error values were tallied instead of adding all the previous values to solve this problem. The modified controller equation is provided in <xref ref-type="disp-formula" rid="eqn-4">Eq. (4)</xref>:</p>
<p><disp-formula id="eqn-4">
<label>(4)</label>
<!--<alternatives><graphic mimetype="image" mime-subtype="png" xlink:href="eqn-4.png"/>-->
<!--<tex-math id="tex-eqn-4"><![CDATA[$$\begin{equation}
u \left(kT\right)=K_{p}\,e \left(kT\right)+K_{i}T\sum_{k}^{3}e \left(kT\right)+K_{d}\frac{\,e \left(kT\right)-e \left(kT-T\right)}{T}.
 \label{eqn-4}
\end{equation}$$]]></tex-math>-->
<mml:math id="mml-eqn-4" display="block"><mml:mi>u</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>k</mml:mi><mml:mi>T</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>K</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi></mml:mrow></mml:msub><mml:mspace width="0.3em"/><mml:mi>e</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>k</mml:mi><mml:mi>T</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:msub><mml:mrow><mml:mi>K</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mi>T</mml:mi><mml:mstyle displaystyle='true'><mml:mstyle displaystyle='true'><mml:munderover><mml:mrow><mml:mo>&#x2211;</mml:mo> </mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:munderover></mml:mstyle></mml:mstyle><mml:mi>e</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>k</mml:mi><mml:mi>T</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:msub><mml:mrow><mml:mi>K</mml:mi></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msub><mml:mfrac><mml:mrow><mml:mspace width="0.3em"/><mml:mi>e</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>k</mml:mi><mml:mi>T</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>-</mml:mo><mml:mi>e</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>k</mml:mi><mml:mi>T</mml:mi><mml:mo>-</mml:mo><mml:mi>T</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:mfrac><mml:mo>.</mml:mo></mml:math><!--</alternatives>--></disp-formula></p>
<p>This technique provides a satisfactory performance for path tracking.</p>
</sec>
<sec id="s3_2">
<label>3.2</label>
<title>Artificial Neural Network Mathematical Model</title>
<p>An artificial neural network (ANN) is a computing system that consists of many simple but highly interconnected processing elements. These elements are processed by variations in external inputs. The ANN structure presented in this work was built using multiple weighted hidden layers, which were supervised by a feed-forward network using a back-propagation algorithm. This method is widely used in many applications [<xref ref-type="bibr" rid="ref-24">24</xref>]. ANNs are best suited to human-like operations, such as image processing, speech recognition, robotic control, and power system protection and control management. An ANN can be compared to a human brain. The human brain operates rapidly and consists of many neurons or nodes. Each signal or bit of information travels through a neuron, where it is processed, calculated, manipulated, and then transferred to the next neuron cell. The overall processing speed of each neuron or node may be slow, but the overall network is very fast and efficient.</p>
</sec>
<sec id="s3_3">
<label>3.3</label>
<title>ANN Structure</title>
<p>The first layers used in the ANN are the input layer and the highest layer, which is the output layer. Each bit of information is processed through the hidden layers (intermediate layers) and output layers. The signals or information data are manipulated, calculated, and processed in each layer, before being transferred to the respective network layers. When information is processed through layers or nodes in an ANN, more efficient results can be obtained when the number of hidden layers increases. The ANN operates through these layers and calculates and overwrites the results as it is trained with input data. This makes the entire network not only efficient but also capable of predicting future outcomes and making necessary decisions. This is why ANNs are often compared to the neuron cells of the human brain.</p>
<p>The ANN developed in this study consists of three inputs or neurons (<xref ref-type="fig" rid="fig-10">Fig. 10</xref>). The first input is dedicated to the left sensor, the second input is dedicated to the middle sensor, and the third input is dedicated to the right sensor. Following best practices, the first hidden layer is composed of the same number of neurons as the input layer. The second hidden layer comprises two neurons, and the output layer comprises one neuron for error prediction. The hidden layers use a sigmoid function as the activation function, and the output layer uses a linear function.</p>
<fig id="fig-10">
<label>Figure 10</label>
<caption>
<title>Neural network structure for controlling a mobile robot</title>
</caption><graphic mimetype="image" mime-subtype="png" xlink:href="fig-10.png"/>
</fig>
<p>Three-layered feed-forward networks were supervised by the back-propagation algorithm in the ANN. Therefore, three functions needed to be constructed: one for the inputs to the first hidden layers, another for the first hidden layer to the second hidden layer, and a third for the hidden layers to output layers or targets. <xref ref-type="fig" rid="fig-11">Fig. 11</xref> shows a block diagram illustrating the equations of the final output.</p>
<fig id="fig-11">
<label>Figure 11</label>
<caption>
<title>Neural network equations</title>
</caption><graphic mimetype="image" mime-subtype="png" xlink:href="fig-11.png"/>
</fig>
</sec>
</sec>
<sec id="s4">
<label>4</label>
<title>Implementation of PID Neural Network Controller</title>
<p>The ANN algorithm that was developed and implemented in an embedded system for the proposed mobile robot was programmed using C language.</p>
<p>There are some challenges associated with the implementation of an ANN in a very small system. These challenges were more significant back in the era of inexpensive microcontrollers and hobbyist boards. However, Arduinos, like so many of today&#x2019;s boards, are capable of quickly completing their required tasks.</p>
<p>The Arduino Uno used in this work is based on Atmel&#x2019;s ATmega328P microcontroller. Its 2K of SRAM is adequate for a sample network with three inputs, five hidden cells, and one output. By leveraging the Arduino&#x2019;s GCC language support for multidimensional arrays and floating-point math, the programming process becomes very manageable.</p>
<p>The neural network architecture and algorithm design apprenticeship are monitored offline by the Keras Python library.</p>
<sec id="s4_1">
<label>4.1</label>
<title>ANN Implementation on Arduino</title>
<p>A single neuron received an input (In) and produced an output activation (Out). The activation function calculated the neuron&#x2019;s output based on the sum of the weighted connections feeding that neuron. The most common activation function, which is called the sigmoid function, is the following:
<disp-formula id="eqn-5">
<!--<alternatives><graphic mimetype="image" mime-subtype="png" xlink:href="eqn-5.png"/>-->
<!--<tex-math id="tex-eqn-5"><![CDATA[$$\begin{eqnarray*}
\text{Out }=1.0/ \left(1.0+\exp \left(-\mathrm{In}\right)\right);
\end{eqnarray*}$$]]></tex-math>-->
<mml:math id="mml-eqn-5" display="block"><mml:mrow><mml:mstyle><mml:mtext>Out&#x00A0;</mml:mtext></mml:mstyle><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>.</mml:mo><mml:mn>0</mml:mn><mml:mo>/</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>.</mml:mo><mml:mn>0</mml:mn><mml:mo>+</mml:mo><mml:mo> exp</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>-</mml:mo><mml:mstyle mathvariant="normal"><mml:mi>I</mml:mi><mml:mi>n</mml:mi></mml:mstyle></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>;</mml:mo></mml:mrow></mml:math><!--</alternatives>--></disp-formula>
</p>
<p>To compute the hidden unit&#x2019;s activations, we used the following C code:
<disp-formula id="eqn-6">
<!--<alternatives><graphic mimetype="image" mime-subtype="png" xlink:href="eqn-6.png"/>-->
<!--<tex-math id="tex-eqn-6"><![CDATA[$$\begin{eqnarray*}
\begin{array}{l}/*\mathrm{j}~\text{loop computes hidden unit activations }*/ \\ \mathrm{for} \left(\mathrm{j}=1;\mathrm{j}< =\text{ NumHidden };\mathrm{j}++\right) \\ \left\{~~~~~~~~ \text{S}\text{u}\text{m}\text{H} \left[\mathrm{j}\right]=\text{W}\text{e}\text{i}\text{g}\text{h}\text{tIH} \left[0\right]
 \left[\mathrm{j}\right];\right. \\ \,\,\,\,\,\,\,\,\,\,\,\mathrm{for} \left(\mathrm{i}=1;\mathrm{i}< =\text{ NumInput };\mathrm{i}++\right) \\ \left\{\text{S}\text{u}\text{m}\text{H} \left[\mathrm{j}\right]+=\text{ Input} \left[\mathrm{i}\right]*\text{ WeightIH} \left[\mathrm{i}\right] \left[\mathrm{j}\right];\right\} \\ \text{H}\text{i}\text{d}\text{d}\text{e}\text{n} \left[\mathrm{j}\right]=1.0/ \left(1.0+\exp \left(-\text{S}\text{u}\text{m}\text{H} \left[\mathrm{j}\right]\right)\right) ; \\ \left. \right\}\end{array}
\end{eqnarray*}$$]]></tex-math>-->
<mml:math id="mml-eqn-6" display="block"><mml:mrow><mml:mtable equalrows="false" columnlines="" equalcolumns="false"><mml:mtr><mml:mtd columnalign="left"><mml:mo>/</mml:mo><mml:mo>*</mml:mo><mml:mstyle mathvariant="normal"><mml:mi>j</mml:mi></mml:mstyle><mml:mspace width=".3em" /><mml:mstyle><mml:mtext>loop&#x00A0;computes&#x00A0;hidden&#x00A0;unit&#x00A0;activations&#x00A0;</mml:mtext></mml:mstyle><mml:mo>*</mml:mo><mml:mo>/</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mstyle mathvariant="normal"><mml:mi>f</mml:mi><mml:mi>o</mml:mi><mml:mi>r</mml:mi></mml:mstyle><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mstyle mathvariant="normal"><mml:mi>j</mml:mi></mml:mstyle><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>;</mml:mo><mml:mstyle mathvariant="normal"><mml:mi>j</mml:mi></mml:mstyle><mml:mo>&#x003C;</mml:mo><mml:mo>=</mml:mo><mml:mstyle><mml:mtext>&#x00A0;NumHidden&#x00A0;</mml:mtext></mml:mstyle><mml:mo>;</mml:mo><mml:mstyle mathvariant="normal"><mml:mi>j</mml:mi></mml:mstyle><mml:mo>+</mml:mo><mml:mo>+</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mo>{</mml:mo><mml:mrow><mml:mspace width=".3em" /><mml:mspace width=".3em" /><mml:mspace width=".3em" /><mml:mspace width=".3em" /><mml:mspace width=".3em" /><mml:mspace width=".3em" /><mml:mspace width=".3em" /><mml:mspace width=".3em" /><mml:mstyle><mml:mtext>S</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>u</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>m</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>H</mml:mtext></mml:mstyle><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mstyle mathvariant="normal"><mml:mi>j</mml:mi></mml:mstyle></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mstyle><mml:mtext>W</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>e</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>i</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>g</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>h</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>tIH</mml:mtext></mml:mstyle><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mstyle mathvariant="normal"><mml:mi>j</mml:mi></mml:mstyle></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>;</mml:mo></mml:mrow><mml:mo></mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mspace width="0.3em"/><mml:mspace width="0.3em"/><mml:mspace width="0.3em"/><mml:mspace width="0.3em"/><mml:mspace width="0.3em"/><mml:mspace width="0.3em"/><mml:mspace width="0.3em"/><mml:mspace width="0.3em"/><mml:mspace width="0.3em"/><mml:mspace width="0.3em"/><mml:mspace width="0.3em"/><mml:mstyle mathvariant="normal"><mml:mi>f</mml:mi><mml:mi>o</mml:mi><mml:mi>r</mml:mi></mml:mstyle><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mstyle mathvariant="normal"><mml:mi>i</mml:mi></mml:mstyle><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>;</mml:mo><mml:mstyle mathvariant="normal"><mml:mi>i</mml:mi></mml:mstyle><mml:mo>&#x003C;</mml:mo><mml:mo>=</mml:mo><mml:mstyle><mml:mtext>&#x00A0;NumInput&#x00A0;</mml:mtext></mml:mstyle><mml:mo>;</mml:mo><mml:mstyle mathvariant="normal"><mml:mi>i</mml:mi></mml:mstyle><mml:mo>+</mml:mo><mml:mo>+</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mo>{</mml:mo><mml:mrow><mml:mstyle><mml:mtext>S</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>u</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>m</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>H</mml:mtext></mml:mstyle><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mstyle mathvariant="normal"><mml:mi>j</mml:mi></mml:mstyle></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:mo>=</mml:mo><mml:mstyle><mml:mtext>&#x00A0;Input</mml:mtext></mml:mstyle><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mstyle mathvariant="normal"><mml:mi>i</mml:mi></mml:mstyle></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>*</mml:mo><mml:mstyle><mml:mtext>&#x00A0;WeightIH</mml:mtext></mml:mstyle><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mstyle mathvariant="normal"><mml:mi>i</mml:mi></mml:mstyle></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mstyle mathvariant="normal"><mml:mi>j</mml:mi></mml:mstyle></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>;</mml:mo></mml:mrow><mml:mo>}</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mstyle><mml:mtext>H</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>i</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>d</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>d</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>e</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>n</mml:mtext></mml:mstyle><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mstyle mathvariant="normal"><mml:mi>j</mml:mi></mml:mstyle></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>.</mml:mo><mml:mn>0</mml:mn><mml:mo>/</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>.</mml:mo><mml:mn>0</mml:mn><mml:mo>+</mml:mo><mml:mo> exp</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mo>-</mml:mo><mml:mstyle><mml:mtext>S</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>u</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>m</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>H</mml:mtext></mml:mstyle><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mstyle mathvariant="normal"><mml:mi>j</mml:mi></mml:mstyle></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>;</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mo></mml:mo><mml:mo>}</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math><!--</alternatives>--></disp-formula>
</p>
<p>To compute the output units&#x2019; activations, we used the following C code:
<disp-formula id="eqn-7">
<!--<alternatives><graphic mimetype="image" mime-subtype="png" xlink:href="eqn-7.png"/>-->
<!--<tex-math id="tex-eqn-7"><![CDATA[$$\begin{eqnarray*}
\begin{array}{l} \\ /*\mathrm{k}~\text{loop computes output unit activations }*/ \\ \mathrm{for} \left(\mathrm{k}=1;\mathrm{k}< =\text{ NumOutput };\mathrm{k}++\right) \\ \left\{~~~~~~~ \text{S}\text{u}\text{m}\text{O} \left[\mathrm{k}\right]=\text{W}\text{e}\text{i}\text{g}\text{h}\text{tHO} \left[0\right]
 \left[\mathrm{k}\right];\right. \\ \,\,\,\,\,\,\,\,\,\mathrm{for} \left(\mathrm{j}=1;\mathrm{j}< =\text{ NumHidden };\mathrm{j}++\right) \\ \left\{\text{S}\text{u}\text{m}\text{O} \left[\mathrm{k}\right]+=\text{ Hidden} \left[\mathrm{j}\right]*\text{W}\text{e}\text{i}\text{g}\text{h}\text{tHO}
 \left[\mathrm{j}\right] \left[\mathrm{k}\right] ;\right\} \\ \text{O}\text{u}\text{t}\text{p}\text{u}\text{t} \left[\mathrm{k}\right]=\text{S}\text{u}\text{m}\text{O} \left[\mathrm{k}\right] ; \\ \left. \right\}\end{array}
\end{eqnarray*}$$]]></tex-math>-->
<mml:math id="mml-eqn-7" display="block"><mml:mrow><mml:mtable equalrows="false" columnlines="" equalcolumns="false"><mml:mtr><mml:mtd columnalign="left"></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mo>/</mml:mo><mml:mo>*</mml:mo><mml:mstyle mathvariant="normal"><mml:mi>k</mml:mi></mml:mstyle><mml:mspace width=".3em" /><mml:mstyle><mml:mtext>loop&#x00A0;computes&#x00A0;output&#x00A0;unit&#x00A0;activations&#x00A0;</mml:mtext></mml:mstyle><mml:mo>*</mml:mo><mml:mo>/</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mstyle mathvariant="normal"><mml:mi>f</mml:mi><mml:mi>o</mml:mi><mml:mi>r</mml:mi></mml:mstyle><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mstyle mathvariant="normal"><mml:mi>k</mml:mi></mml:mstyle><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>;</mml:mo><mml:mstyle mathvariant="normal"><mml:mi>k</mml:mi></mml:mstyle><mml:mo>&#x003C;</mml:mo><mml:mo>=</mml:mo><mml:mstyle><mml:mtext>&#x00A0;NumOutput&#x00A0;</mml:mtext></mml:mstyle><mml:mo>;</mml:mo><mml:mstyle mathvariant="normal"><mml:mi>k</mml:mi></mml:mstyle><mml:mo>+</mml:mo><mml:mo>+</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mo>{</mml:mo><mml:mrow><mml:mspace width=".3em" /><mml:mspace width=".3em" /><mml:mspace width=".3em" /><mml:mspace width=".3em" /><mml:mspace width=".3em" /><mml:mspace width=".3em" /><mml:mspace width=".3em" /><mml:mstyle><mml:mtext>S</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>u</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>m</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>O</mml:mtext></mml:mstyle><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mstyle mathvariant="normal"><mml:mi>k</mml:mi></mml:mstyle></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mstyle><mml:mtext>W</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>e</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>i</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>g</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>h</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>tHO</mml:mtext></mml:mstyle><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mstyle mathvariant="normal"><mml:mi>k</mml:mi></mml:mstyle></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>;</mml:mo></mml:mrow><mml:mo></mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mspace width="0.3em"/><mml:mspace width="0.3em"/><mml:mspace width="0.3em"/><mml:mspace width="0.3em"/><mml:mspace width="0.3em"/><mml:mspace width="0.3em"/><mml:mspace width="0.3em"/><mml:mspace width="0.3em"/><mml:mspace width="0.3em"/><mml:mstyle mathvariant="normal"><mml:mi>f</mml:mi><mml:mi>o</mml:mi><mml:mi>r</mml:mi></mml:mstyle><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mstyle mathvariant="normal"><mml:mi>j</mml:mi></mml:mstyle><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>;</mml:mo><mml:mstyle mathvariant="normal"><mml:mi>j</mml:mi></mml:mstyle><mml:mo>&#x003C;</mml:mo><mml:mo>=</mml:mo><mml:mstyle><mml:mtext>&#x00A0;NumHidden&#x00A0;</mml:mtext></mml:mstyle><mml:mo>;</mml:mo><mml:mstyle mathvariant="normal"><mml:mi>j</mml:mi></mml:mstyle><mml:mo>+</mml:mo><mml:mo>+</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mo>{</mml:mo><mml:mrow><mml:mstyle><mml:mtext>S</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>u</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>m</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>O</mml:mtext></mml:mstyle><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mstyle mathvariant="normal"><mml:mi>k</mml:mi></mml:mstyle></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:mo>=</mml:mo><mml:mstyle><mml:mtext>&#x00A0;Hidden</mml:mtext></mml:mstyle><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mstyle mathvariant="normal"><mml:mi>j</mml:mi></mml:mstyle></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>*</mml:mo><mml:mstyle><mml:mtext>W</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>e</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>i</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>g</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>h</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>tHO</mml:mtext></mml:mstyle><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mstyle mathvariant="normal"><mml:mi>j</mml:mi></mml:mstyle></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mstyle mathvariant="normal"><mml:mi>k</mml:mi></mml:mstyle></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>;</mml:mo></mml:mrow><mml:mo>}</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mstyle><mml:mtext>O</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>u</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>t</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>p</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>u</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>t</mml:mtext></mml:mstyle><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mstyle mathvariant="normal"><mml:mi>k</mml:mi></mml:mstyle></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mstyle><mml:mtext>S</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>u</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>m</mml:mtext></mml:mstyle><mml:mstyle><mml:mtext>O</mml:mtext></mml:mstyle><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mstyle mathvariant="normal"><mml:mi>k</mml:mi></mml:mstyle></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>;</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mo></mml:mo><mml:mo>}</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math><!--</alternatives>--></disp-formula>
</p>
</sec>
<sec id="s4_2">
<label>4.2</label>
<title>Implementation of PID Controller on Arduino</title>
<p>We used the code below to implement the digital PID controller.</p>
<p>void calculatePID( )</p> 
<p>{</p>
<p>P = error;</p> 
<p>I = I + error;</p> 
<p>D = error-previousError;</p> 
<p>PIDvalue = (Kp * P) + (Ki * I) + (Kd * D);</p> 
<p>previousError = error;</p> 
<p>}</p>
<p>The neural network architecture and algorithm design apprenticeship were monitored offline by Keras.</p>
</sec>
<sec id="s4_3">
<label>4.3</label>
<title>Implementation of the Proposed Neural Network Using Python and Keras</title>
<p>Keras is a powerful and easy-to-use Python library for developing and evaluating deep-learning models. It wraps around the numerical computation libraries Theano and TensorFlow and allows users to define and train neural network models using a few short lines of code.</p>
<p>1-The random number generator was initialized with a fixed seed value. In this way, the same code was run repeatedly, and the same result was obtained.</p>
<p><underline>The code</underline>:</p>
<p>from keras.models import Sequential</p>
<p>from keras.layers import Dense</p>
<p>import numpy</p>
<p>numpy.random.seed(7)</p>
<p>2-The models in Keras are defined as a sequence of layers. A fully-connected network structure with three layers was used. Fully-connected layers were defined using the <bold>Dense</bold> class.</p>
<p>The first layer was created with the <bold>input_dim</bold> argument by setting it to three for the three input variables.</p>
<p>The number of neurons in the layer was specified as the first argument, and the activation function was specified using the <bold>activation</bold> argument.</p>
<p>The <bold>sigmoid</bold> activation function was used for all layers.</p>
<p>The first hidden layer had three neurons and expected three input variables (e.g., <inline-formula id="ieqn-4"><!--<alternatives><inline-graphic xlink:href="ieqn-4.png"/>--><!--<tex-math id="tex-ieqn-4"><![CDATA[${\textbf{input\_dim}= 3}$]]></tex-math>--><mml:math id="mml-ieqn-4"><mml:mstyle class="text"><mml:mtext class="textbf" mathvariant="bold">input_dim</mml:mtext></mml:mstyle><mml:mo>=</mml:mo><mml:mn>3</mml:mn></mml:math><!--</alternatives>--></inline-formula>). The second hidden layer had three neurons, and the third hidden layer had two neurons. The output layer had one neuron to predict the class.</p>
<p><underline>The code</underline>:</p>
<p>model = Sequential ( )</p>
<p>model.add(Dense(3, input_dim = 3, activation = &#x2018;sigmoid&#x2019;, use_bias = False))</p>
<p>model.add(Dense(2, activation = &#x2018;sigmoid&#x2019;, use_bias = False))</p>
<p>model.add(Dense(1, activation = &#x2018;linear&#x2019;, use_bias = False))</p>
<p>3-Once the model is defined, it can be compiled. The loss function must be specified to evaluate a set of weights. The optimizer is used to search through different weights in the network. For the case being evaluated, the <bold><italic>mse</italic></bold> loss and the <bold><italic>rmsprop</italic></bold> algorithm were used.</p>
<p><underline>The code</underline>:</p>
<p># Compile model</p>
<p>model.compile(loss=&#x2019;mse&#x2019;, optimizer=&#x2019;RMSprop&#x2019;, metrics=[rmse])</p>
<p>The proposed model can be trained or fitted to the loaded data by calling the <bold><italic>fit ()</italic></bold> function. The training process runs for a fixed number of iterations through a dataset called <bold>epochs</bold>. The <bold>batch size</bold> is the number of instances evaluated before performing a weight update in the network using trial and error.</p>
<p><underline>The code</underline>:</p>
<p># Fit the model</p>
<p>model.fit(X, Y, epochs = 10000, batch_size = 10)</p>
<p>The proposed neural network was trained for the entire dataset, and network performance was obtained for the same dataset.</p>
<p><underline>The code</underline>:</p>
<p># evaluate the model</p>
<p>scores = model.evaluate(X, Y)</p>
<p><underline><bold>The complete code</bold></underline></p>
<p>from keras.models import Sequential</p>
<p>from keras.layers import Dense</p>
<p>import numpy</p>
<p>from keras import backend</p>
<p># from sklearn.model_selection import train_test_split</p>
<p># from matplotlib import pyplot</p>
<p># fix random seed for reproducibility</p>
<p>numpy.random.seed(7)</p>
<p>def rmse(y_true, y_pred):</p>
<p>return backend.sqrt(backend.mean(backend.square(y_pred - y_true), axis = &#x2212;1))</p>
<p># # split into input (X) and output (Y) variables</p>
<p>X = numpy.loadtxt(&#x2019;input_31.csv&#x2019;, delimiter=&#x2019;,&#x2019;)</p>
<p>Y = numpy.loadtxt(&#x2019;output_31.csv&#x2019;, delimiter=&#x2019;,&#x2019;)</p>
<p>#(trainX, testX, trainY, testY) = train_test_split(X, Y, test_size = 0.25, random_state = 6)</p>
<p># create model</p>
<p>model = Sequential ()</p>
<p>model.add(Dense(3, input_dim = 3, activation=&#x2019;sigmoid&#x2019;,use_bias=False))</p>
<p>model.add(Dense(2, activation=&#x2019;sigmoid&#x2019;,use_bias=False))</p>
<p>model.add(Dense(1, activation=&#x2019;linear&#x2019;,use_bias=False))# Compile model</p>
<p>model.compile(loss=&#x2019;mse&#x2019;, optimizer=&#x2019;RMSprop&#x2019;, metrics=[rmse])</p>
<p># Fit the model</p>
<p>model.fit(X, Y, epochs = 10000)</p>
<p># evaluate the model</p>
<p>#result = model.predict(testX)</p>
<p>#print(result- testY)</p>
<p>scores = model.evaluate(X, Y)</p>
<p>Keras was used to train the proposed ANN according to specific sensor positions placed on the path line. These sensor positions are shown in <xref ref-type="fig" rid="fig-8">Fig. 8</xref> and listed in <xref ref-type="table" rid="table-2">Tab. 2</xref>.</p>
<table-wrap id="table-2">
<label>Table 2</label>
<caption>
<title>Follower-logic target/neural network manual training data</title>
</caption>
<table>
<colgroup>
<col/>
<col/>
<col/>
<col/>
<col/>
</colgroup>
<thead>
<tr>
<th colspan="3">Sensor</th>
<th>Error</th>
<th>Detail</th>
</tr>
</thead>
<tbody>
<tr>
<td>Left</td>
<td>Middle</td>
<td>Right</td>
<td/>
<td/>
</tr>
<tr>
<td>1</td>
<td>0</td>
<td>0</td>
<td>&#x2212;2</td>
<td>Vehicle on the edge of the rightmost line</td>
</tr>
<tr>
<td>1</td>
<td>1</td>
<td>0</td>
<td>&#x2212;1</td>
<td>Vehicle on the middle of the right line</td>
</tr>
<tr>
<td>0</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>Vehicle on the middle line</td>
</tr>
<tr>
<td>0</td>
<td>1</td>
<td>1</td>
<td>1</td>
<td>Vehicle on the edge of the leftmost line</td>
</tr>
<tr>
<td>0</td>
<td>0</td>
<td>1</td>
<td>2</td>
<td>Vehicle on the middle of the left line</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>After running 1000 iterations with a decaying learning rate, the weight of each dense was found with root-mean-square error rmse = 0.13%.</p>
<p>The weights connecting the input layer to the hidden layer were stored in a dense_1 matrix with three rows and 10 columns.</p>
<p><bold><italic>dense_1</italic></bold></p>
<list list-type="bullet">
<list-item><p>[ 1.5360345, &#x2212;3.6838768, &#x2212;1.076581],</p></list-item>
<list-item><p>[ &#x2212;1.1123676, &#x2212;2.4534192, 1.8363825],</p></list-item>
<list-item><p>[ &#x2212;3.039003, 1.5306051, 2.718451]</p></list-item>
</list>
<p><bold><italic>dense_2</italic></bold></p>
<list list-type="bullet">
<list-item><p>[ &#x2212;2.8450463, 1.5029238],</p></list-item>
<list-item><p>[3.0052474, &#x2212;0.7608043],</p></list-item>
<list-item><p>[ &#x2212;0.91276926, &#x2212;2.0846417]</p></list-item>
</list>
<p><bold><italic>dense_3</italic></bold></p>
<list list-type="bullet">
<list-item><p>[ 2.7599642],</p></list-item>
<list-item><p>[ &#x2212;3.3178754]</p></list-item>
</list>
<p>A comparison between real targets and the predictions calculated by Keras is presented in <xref ref-type="table" rid="table-3">Tab. 3</xref>.</p>
<table-wrap id="table-3">
<label>Table 3</label>
<caption>
<title>Comparison between real targets and predictions calculated by Keras</title>
</caption>
<table>
<colgroup>
<col/>
<col/>
<col/>
<col/>
<col/>
</colgroup>
<thead>
<tr>
<th colspan="3">Sensor</th>
<th>Target error</th>
<th>Predicted error</th>
</tr>
</thead>
<tbody>
<tr>
<td>Left</td>
<td>Middle</td>
<td>Right</td>
<td/>
<td/>
</tr>
<tr>
<td>1</td>
<td>0</td>
<td>0</td>
<td>&#x2212;2</td>
<td>&#x2212;1.9988520e + 00</td>
</tr>
<tr>
<td>1</td>
<td>1</td>
<td>0</td>
<td>&#x2212;1</td>
<td>&#x2212;9.9838352e &#x2212; 01</td>
</tr>
<tr>
<td>0</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>1.0817051e &#x2212; 03</td>
</tr>
<tr>
<td>0</td>
<td>1</td>
<td>1</td>
<td>1</td>
<td>1.0014127e + 00</td>
</tr>
<tr>
<td>0</td>
<td>0</td>
<td>1</td>
<td>2</td>
<td>2.0011692e + 00</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>The vehicle with the trained neural network controller was successfully tested on several paths. We found that its speed varied to cope with real situations, and the robot moved faster on a straight path and reduced its speed on curves.</p>
</sec>
</sec>
<sec id="s5">
<label>5</label>
<title>Conclusions</title>
<p>We developed a mobile-robot platform with a fixed four-wheel configuration chassis and a combined PID and deep-learning controller to guarantee a smooth tracking line. We found that the proposed method is well suited to mobile robots, because they are capable of operating with imprecise information. More advanced controller-based CNNs can be developed in the future.</p>
</sec>
</body>
<back>
<ack><p>The authors would like to extend their sincere appreciation to the Deanship of Scientific Research at King Saud University for its funding of this research through the Research Group No. RG-1439/007.</p></ack>
<fn-group><fn fn-type="other"><p><bold>Funding Statement:</bold> The authors received funding for this research through Research Group No. RG-1439/007.</p></fn>
<fn fn-type="conflict"><p><bold>Conflicts of Interest:</bold> The authors declare that they have no conflicts of interest to report regarding the present study.</p></fn></fn-group>
<ref-list content-type="authoryear">
<title>References</title>
<ref id="ref-1"><label>[1]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>G. Z.</given-names> <surname>Yang</surname></string-name>, <string-name><given-names>B. J.</given-names> <surname>Nelson</surname></string-name>, <string-name><given-names>R. R.</given-names> <surname>Murphy</surname></string-name>, <string-name><given-names>H.</given-names> <surname>Choset</surname></string-name>, <string-name><given-names>H.</given-names> <surname>Christensen</surname></string-name> <etal>et al.</etal></person-group><italic>,</italic> &#x201C;<article-title>The role of robotics in managing public health and infectious diseases</article-title>,&#x201D; <source>Science Robotics</source>, vol. <volume>5</volume>, no. <issue>40</issue>, pp. <fpage>1</fpage>&#x2013;<lpage>2</lpage>, <year>2020</year>.</mixed-citation></ref>
<ref id="ref-2"><label>[2]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>K.</given-names> <surname>Chakraborty</surname></string-name>, <string-name><given-names>S.</given-names> <surname>Bhatia</surname></string-name>, <string-name><given-names>S.</given-names> <surname>Bhattacharyya</surname></string-name>, <string-name><given-names>J.</given-names> <surname>Platos</surname></string-name>, <string-name><given-names>R.</given-names> <surname>Bag</surname></string-name> <etal>et al.</etal></person-group><italic>,</italic> &#x201C;<article-title>Sentiment analysis of COVID-19 tweets by deep learning classifiers&#x2014;A study to show how popularity is affecting accuracy in social media</article-title>,&#x201D; <source>Applied Soft Computing</source>, vol. <volume>97</volume>, pp. <fpage>106754</fpage>, <year>2020</year>.</mixed-citation></ref>
<ref id="ref-3"><label>[3]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>K.</given-names> <surname>Dev</surname></string-name>, <string-name><given-names>A. S.</given-names> <surname>Khowaja</surname></string-name>, <string-name><given-names>A. S.</given-names> <surname>Bist</surname></string-name>, <string-name><given-names>V.</given-names> <surname>Saini</surname></string-name> and <string-name><given-names>S.</given-names> <surname>Bhatia</surname></string-name></person-group>, &#x201C;<article-title>Triage of potential COVID-19 patients from chest X-ray images using hierarchical convolutional networks</article-title>,&#x201D; <source>Neural Computing and Applications</source>, <year>2020</year>.</mixed-citation></ref>
<ref id="ref-4"><label>[4]</label><mixed-citation publication-type="book"><person-group person-group-type="author"><string-name><given-names>R. H.</given-names> <surname>Taylor</surname></string-name>, <string-name><given-names>A.</given-names> <surname>Menciassi</surname></string-name>, <string-name><given-names>G.</given-names> <surname>Fichtinger</surname></string-name>, <string-name><given-names>P.</given-names> <surname>Fiorini</surname></string-name>, <string-name><given-names>P.</given-names> <surname>Dario</surname></string-name> <etal>et al.</etal></person-group><italic>,</italic> &#x201C;<chapter-title>Medical robotics and computer-integrated surgery</chapter-title>,&#x201D; in <source>Springer Handbook of Robotics</source>, <publisher-loc>Berlin, Germany</publisher-loc>: <publisher-name>Springer</publisher-name>, pp. <fpage>1657</fpage>&#x2013;<lpage>1684</lpage>, <year>2016</year>.</mixed-citation></ref>
<ref id="ref-5"><label>[5]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>K. J.</given-names> <surname>V&#x00E4;nni</surname></string-name>, <string-name><given-names>S. E.</given-names> <surname>Salin</surname></string-name>, <string-name><given-names>A.</given-names> <surname>Kheddar</surname></string-name>, <string-name><given-names>E.</given-names> <surname>Yoshida</surname></string-name>, <string-name><given-names>S. S.</given-names> <surname>Ge</surname></string-name> <etal>et al.</etal></person-group><italic>,</italic> &#x201C;<article-title>A need for service robots among health care professionals in hospitals and housing services</article-title>,&#x201D; in <conf-name>Int. Conf. on Social Robotics</conf-name>, <publisher-loc>Tsukuba, Japan</publisher-loc>, vol. <volume>10652</volume>, pp. <fpage>178</fpage>&#x2013;<lpage>187</lpage>, <year>2017</year>.</mixed-citation></ref>
<ref id="ref-6"><label>[6]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>L.</given-names> <surname>Bai</surname></string-name>, <string-name><given-names>J.</given-names> <surname>Yang</surname></string-name>, <string-name><given-names>X.</given-names> <surname>Chen</surname></string-name>, <string-name><given-names>Y.</given-names> <surname>Sun</surname></string-name> and <string-name><given-names>X.</given-names> <surname>Li</surname></string-name></person-group>, &#x201C;<article-title>Medical robotics in bone fracture reduction surgery: A review</article-title>,&#x201D; <source>Sensors</source>, vol. <volume>19</volume>, no. <issue>16</issue>, pp. <fpage>1</fpage>&#x2013;<lpage>19</lpage>, <year>2019</year>.</mixed-citation></ref>
<ref id="ref-7"><label>[7]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>S.</given-names> <surname>Balasubramanian</surname></string-name>, <string-name><given-names>J.</given-names> <surname>Chenniah</surname></string-name>, <string-name><given-names>G.</given-names> <surname>Balasubramanian</surname></string-name> and <string-name><given-names>V.</given-names> <surname>Vellaipandi</surname></string-name></person-group>, &#x201C;<article-title>The era of robotics: Dexterity for surgery and medical care: Narrative review</article-title>,&#x201D; <source>International Surgery Journal</source>, vol. <volume>7</volume>, no. <issue>4</issue>, pp. <fpage>1317</fpage>&#x2013;<lpage>1323</lpage>, <year>2020</year>.</mixed-citation></ref>
<ref id="ref-8"><label>[8]</label><mixed-citation publication-type="book"><person-group person-group-type="author"><string-name><given-names>R.</given-names> <surname>Siegwart</surname></string-name> and <string-name><given-names>I. R.</given-names> <surname>Nourbakhsh</surname></string-name></person-group>, <source>Introduction to Autonomous Mobile Robots</source>, <comment>A Bradford Book</comment>, <publisher-loc>Cambridge</publisher-loc>: <publisher-name>The MIT Press</publisher-name>, pp. <fpage>11</fpage>&#x2013;<lpage>20</lpage>, <year>2004</year>.</mixed-citation></ref>
<ref id="ref-9"><label>[9]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>S. E.</given-names> <surname>Oltean</surname></string-name></person-group>, &#x201C;<article-title>Mobile robot platform with arduino uno and raspberry pi for autonomous navigation</article-title>,&#x201D; <source>Procedia Manufacturing</source>, vol. <volume>32</volume>, pp. <fpage>572</fpage>&#x2013;<lpage>577</lpage>, <year>2019</year>.</mixed-citation></ref>
<ref id="ref-10"><label>[10]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>H.</given-names> <surname>Masuzawa</surname></string-name>, <string-name><given-names>J.</given-names> <surname>Miura</surname></string-name> and <string-name><given-names>S.</given-names> <surname>Oishi</surname></string-name></person-group>, &#x201C;<article-title>Development of a mobile robot for harvest support in greenhouse horticulture-person following and mapping</article-title>,&#x201D; in <conf-name>Int. Symp. on System Integration</conf-name>, <publisher-loc>Taipe</publisher-loc>, pp. <fpage>541</fpage>&#x2013;<lpage>546</lpage>, <year>2017</year>.</mixed-citation></ref>
<ref id="ref-11"><label>[11]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>D.</given-names> <surname>Janglova</surname></string-name></person-group>, &#x201C;<article-title>Neural networks in mobile robot motion</article-title>,&#x201D; <source>International Journal of Advanced Robotic Systems</source>, vol. <volume>1</volume>, pp. <fpage>15</fpage>&#x2013;<lpage>22</lpage>, <year>2004</year>.</mixed-citation></ref>
<ref id="ref-12"><label>[12]</label><mixed-citation publication-type="book"><person-group person-group-type="author"><string-name><given-names>V.</given-names> <surname>Nath</surname></string-name> and <string-name><given-names>S. E.</given-names> <surname>Levinson</surname></string-name></person-group>, <source>Autonomous Robotics and Deep Learning</source>, <publisher-loc>Berlin, Germany</publisher-loc>: <publisher-name>Springer International Publishing</publisher-name>, pp. <fpage>1</fpage>&#x2013;<lpage>3</lpage>, <year>2014</year>.</mixed-citation></ref>
<ref id="ref-13"><label>[13]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>M.</given-names> <surname>Duong</surname></string-name>, <string-name><given-names>T.</given-names> <surname>Do</surname></string-name> and <string-name><given-names>M.</given-names> <surname>Le</surname></string-name></person-group>, &#x201C;<article-title>Navigating self-driving vehicles using convolutional neural network</article-title>,&#x201D; in <conf-name>Int. Conf. on Green Technology and Sustainable Development</conf-name>, <publisher-loc>Ho Chi Minh City</publisher-loc>, pp. <fpage>607</fpage>&#x2013;<lpage>610</lpage>, <year>2018</year>.</mixed-citation></ref>
<ref id="ref-14"><label>[14]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>Y.</given-names> <surname>Takashima</surname></string-name>, <string-name><given-names>K.</given-names> <surname>Watanabe</surname></string-name> and <string-name><given-names>I.</given-names> <surname>Nagai</surname></string-name></person-group>, &#x201C;<article-title>Target approach for an autonomous mobile robot using camera images and its behavioral acquisition for avoiding an obstacle</article-title>,&#x201D; in <conf-name>IEEE Int. Conf. on Mechatronics and Automation</conf-name>, <publisher-loc>Tianjin, China</publisher-loc>, pp. <fpage>251</fpage>&#x2013;<lpage>256</lpage>, <year>2019</year>.</mixed-citation></ref>
<ref id="ref-15"><label>[15]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>Y.</given-names> <surname>Nose</surname></string-name>, <string-name><given-names>A.</given-names> <surname>Kojima</surname></string-name>, <string-name><given-names>H.</given-names> <surname>Kawabata</surname></string-name> and <string-name><given-names>T.</given-names> <surname>Hironaka</surname></string-name></person-group>, &#x201C;<article-title>A Study on a lane keeping system using cnn for online learning of steering control from real time images</article-title>,&#x201D; in <conf-name>34th Int. Technical Conf. on Circuits/Systems, Computers and Communications</conf-name>, <publisher-loc>JeJu, Korea (South)</publisher-loc>, pp. <fpage>1</fpage>&#x2013;<lpage>4</lpage>, <year>2019</year>.</mixed-citation></ref>
<ref id="ref-16"><label>[16]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>F.</given-names> <surname>Kaiser</surname></string-name>, <string-name><given-names>S.</given-names> <surname>Islam</surname></string-name>, <string-name><given-names>W.</given-names> <surname>Imran</surname></string-name>, <string-name><given-names>K. H.</given-names> <surname>Khan</surname></string-name> and <string-name><given-names>K. M. A.</given-names> <surname>Islam</surname></string-name></person-group>, &#x201C;<article-title>Line-follower robot: Fabrication and accuracy measurement by data acquisition</article-title>,&#x201D; in <conf-name>Int. Conf. on Electrical Engineering and Information &#x0026; Communication Technology</conf-name>, <publisher-loc>Dhaka</publisher-loc>, pp. <fpage>1</fpage>&#x2013;<lpage>6</lpage>, <year>2014</year>.</mixed-citation></ref>
<ref id="ref-17"><label>[17]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>N.</given-names> <surname>Yong-Kyun</surname></string-name> and <string-name><given-names>O.</given-names> <surname>Se-Young</surname></string-name></person-group>, &#x201C;<article-title>Hybrid control for autonomous mobile robot navigation using neural network based behavior modules and environment classification</article-title>,&#x201D; <source>Autonomous Robots</source>, vol. <volume>15</volume>, pp. <fpage>193</fpage>&#x2013;<lpage>206</lpage>, <year>2003</year>.</mixed-citation></ref>
<ref id="ref-18"><label>[18]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>Y.</given-names> <surname>Pan</surname></string-name>, <string-name><given-names>X.</given-names> <surname>Li</surname></string-name> and <string-name><given-names>H.</given-names> <surname>Yu</surname></string-name></person-group>, &#x201C;<article-title>Efficient PID tracking control of robotic manipulators driven by compliant actuators</article-title>,&#x201D; <source>IEEE Transactions on Control Systems Technology</source>, vol. <volume>27</volume>, no. <issue>2</issue>, pp. <fpage>915</fpage>&#x2013;<lpage>922</lpage>, <year>2019</year>.</mixed-citation></ref>
<ref id="ref-19"><label>[19]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>J.</given-names> <surname>Heikkinen</surname></string-name>, <string-name><given-names>T.</given-names> <surname>Minav</surname></string-name> and <string-name><given-names>A. D.</given-names> <surname>Stotckaia</surname></string-name></person-group>, &#x201C;<article-title>Self-tuning parameter fuzzy PID controller for autonomous differential drive mobile robot</article-title>,&#x201D; in <conf-name>IEEE Int. Conf. on Soft Computing and Measurements</conf-name>, <publisher-loc>St. Petersburg</publisher-loc>, pp. <fpage>382</fpage>&#x2013;<lpage>385</lpage>, <year>2017</year>.</mixed-citation></ref>
<ref id="ref-20"><label>[20]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>A.</given-names> <surname>Rehman</surname></string-name> and <string-name><given-names>C.</given-names> <surname>Cai</surname></string-name></person-group>, &#x201C;<article-title>Autonomous mobile robot obstacle avoidance using fuzzy-pid controller in robot&#x2019;s varying dynamics</article-title>,&#x201D; in <conf-name>Chinese Control Conf.</conf-name>, <publisher-loc>Shenyang, China</publisher-loc>, pp. <fpage>2182</fpage>&#x2013;<lpage>2186</lpage>, <year>2020</year>.</mixed-citation></ref>
<ref id="ref-21"><label>[21]</label><mixed-citation publication-type="other"><person-group person-group-type="author"><string-name><given-names>P.</given-names> <surname>Gaimar</surname></string-name></person-group>, <source>The Arduino Robot: Robotics for Everyone</source>, <comment>Kindle Edition</comment>, pp. <fpage>100</fpage>&#x2013;<lpage>110</lpage>, <year>2020</year>. [Online]. Available: <uri>https://www.amazon.com/Arduino-Robot-Robotics-everyone-ebook/dp/B088NPQQG9</uri>.</mixed-citation></ref>
<ref id="ref-22"><label>[22]</label><mixed-citation publication-type="other"><person-group person-group-type="author"><string-name><given-names>S. F.</given-names> <surname>Barrett</surname></string-name></person-group>, <source>Arduino II: Systems, Synthesis Lectures on Digital Circuits and Systems</source>, pp. <fpage>10</fpage>&#x2013;<lpage>20</lpage>, <year>2020</year>. [Online]. Available: <uri>https://www.amazon.com/Arduino-II-Synthesis-Lectures-Circuits/dp/1681739003</uri>.</mixed-citation></ref>
<ref id="ref-23"><label>[23]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>A. S.</given-names> <surname>McCormack</surname></string-name> and <string-name><given-names>K. R.</given-names> <surname>Godfrey</surname></string-name></person-group>, &#x201C;<article-title>Rule-based autotuning based on frequency domain identification</article-title>,&#x201D; <source>IEEE Transactions on Control Systems Technology</source>, vol. <volume>6</volume>, no. <issue>1</issue>, pp. <fpage>43</fpage>&#x2013;<lpage>61</lpage>, <year>1998</year>.</mixed-citation></ref>
<ref id="ref-24"><label>[24]</label><mixed-citation publication-type="book"><person-group person-group-type="author"><string-name><given-names>V.</given-names> <surname>Silaparasetty</surname></string-name></person-group>, <source>Deep Learning Projects Using TensorFlow 2: Neural Network Development with Python and Keras</source>, <publisher-name>Apress</publisher-name>, pp. <fpage>10</fpage>&#x2013;<lpage>22</lpage>, <year>2020</year>. [Online]. Available: <uri>https://www.amazon.com/Deep-Learning-Projects-</uri>  <uri>Using-TensorFlow/dp/1484258010#reader_1484258010</uri>.</mixed-citation></ref>
</ref-list>
</back>
</article>