Next Article in Journal
User Recommendation for Data Sharing in Social Internet of Things
Next Article in Special Issue
Hybrid Imitation Learning Framework for Robotic Manipulation Tasks
Previous Article in Journal
Trends and Challenges of Wearable Multimodal Technologies for Stroke Risk Prediction
 
 
Font Type:
Arial Georgia Verdana
Font Size:
Aa Aa Aa
Line Spacing:
Column Width:
Background:
Article

PID++: A Computationally Lightweight Humanoid Motion Control Algorithm

by
Thomas F. Arciuolo
1 and
Miad Faezipour
1,2,*
1
Department of Computer Science & Engineering, University of Bridgeport, Bridgeport, CT 06604, USA
2
Department of Biomedical Engineering, University of Bridgeport, Bridgeport, CT 06604, USA
*
Author to whom correspondence should be addressed.
Sensors 2021, 21(2), 456; https://doi.org/10.3390/s21020456
Submission received: 10 November 2020 / Revised: 31 December 2020 / Accepted: 5 January 2021 / Published: 11 January 2021
(This article belongs to the Collection Smart Robotics for Automation)

Abstract

:
Currently robotic motion control algorithms are tedious at best to implement, are lacking in automatic situational adaptability, and tend to be static in nature. Humanoid (human-like) control is little more than a dream, for all, but the fastest computers. The main idea of the work presented in this paper is to define a radically new, simple, and computationally lightweight approach to humanoid motion control. A new Proportional-Integral-Derivative (PID) controller algorithm called PID++ is proposed in this work that uses minor adjustments with basic arithmetic, based on the real-time encoder position input, to achieve a stable, precise, controlled, dynamic, adaptive control system, for linear motion control, in any direction regardless of load. With no PID coefficients initially specified, the proposed PID++ algorithm dynamically adjusts and updates the PID coefficients K p , K i and K d periodically. No database of values is required to be stored as only the current and previous values of the sensed position with an accurate time base are used in the computations and overwritten in each read interval, eliminating the need of deploying much memory for storing and using vectors or matrices. Complete in its implementation, and truly dynamic and adaptive by design, engineers will be able to use this algorithm in commercial, industrial, biomedical, and space applications alike. With characteristics that are unmistakably human, motion control can be feasibly implemented on even the smallest microcontrollers (MCU) using a single command and without the need of reprogramming or reconfiguration.

1. Introduction

1.1. Motivation and Background

Today, motion control can be found in many aspects of every-day life, including items purchased at stores, as well as systems used in industry, medicine and space. Computer printers, fax machines, robot arms and robotic surgery are a few examples of such devices and applications. Some of the applications, such as printers and fax machines, travel gracefully from place to place, but their motion is static. If the specifications of the system such as its weight or size change, the device’s operation will probably come to a grinding halt.
Humans are not burdened by a requirement to move only one particular object all of the time. A printer’s carriage motor, for example, is. Its control program will never move anything else. Humans can move, pickup, and put down lightweight objects and heavy objects alike. Doing so is automatic and effortless. Today’s industrial robots can do this accurately as well, unfortunately only with extremely computationally costly algorithms running on high-speed computers. Motion control on a low-end computing device, with an algorithm such as the Proportional-Integral-Derivative (PID), will allow the controlled motion of only one particular object at a time. To move another object, perhaps heavier or lighter, with the same algorithm, would more than likely require at least the reprogramming of the PID coefficients ( K p , K i , K d ), and the like. Figure 1 shows the basic PID loop [1], where static PID coefficients are determined to compute the output control function u ( t ) based on Equation (1) according to the error e ( t ) .
u ( t ) = K p × e ( t ) + K i × 0 t e ( τ ) d ( τ ) + K d d e ( t ) d t
Dynamic, on the fly adaptability are hallmarks of human motion control. With the algorithm presented in this paper, called the “PID++”, not only is this dynamic adaptability of human-like (humanoid) control present, but also positional control with accuracy down to 0.0001”, as well as speed and acceleration control, typically found in expensive servo systems. The PID++ algorithm assumes a fully-specifiable, trapezoidal and symmetrical, acceleration and deceleration travel profile.
Linear motion control is the moving of an object from Point A to Point B, also known as “a run”. There are 4 major classifications of linear motion control [2]:
  • Type 1: Moving an object perpendicular to gravity with friction, whereupon the de-application of power, causes the motion to stop. A printer carriage is an example of this Type 1 motion.
  • Type 2: Moving an object perpendicular to gravity without friction (such as on a friction-less table or in outer space). In this scenario, the de-application of power does not cause a slow-down of the object, but slow-down and stopping is affected by applying reverse power to the motor drive. A jet airplane landing on a runway, where reverse thrust is applied to the jets to affect a slow-down, and stop of the airplane, is an example of this Type 2 motion.
  • Type 3: Moving an object parallel to gravity upward and against the force of gravity, i.e., lifting an object. A weight-lifting machine at the gym is an example of an apparatus that exhibits this Type 3 motion, where the user lifts a weight.
  • Type 4: Moving an object parallel to gravity downward and with the force of gravity, i.e., the controlled decent of an object. A weight-lifting machine at the gym is an example of an apparatus that exhibits this Type 4 motion, where the user, in a controlled fashion, brings the weight to the bottom, on the platform.
There are many examples of each of these 4 types of linear motion control, and other examples of compound types of linear motion control.

1.2. Humanoid Motion Control—Problem Identification

We state the research problem definition of humaniod motion control by a single illustrative example. Assume a b l i n d f o l d e d person sits in front of a weight lifting machine at the gym and is asked to lift an unknown weight from the bottom of the platform to a specific height at a particular speed and with a particular trapezoidal, acceleration and deceleration profile. The person must at all times comply with this request, and has no foreknowledge of the amount of weight to be lifted (Type 3). After this run is completed, the user must do the same, with this same weight, or an unknown different amount, and bring this weight back down to the bottom of the platform (Type 4), while always maintaining compliance to the motion specifications. The person will do this repeatedly with many different amounts of weight, one after another. How would the person approach this problem? What would the human/machine operation look like?
The way a human would approach this problem, i.e, the human-like operation of the motion is referred to as humanoid motion control in this paper. It is clear that a human would apply more force when sensing heavier weights to be lifted, and may possibly exhibit slight vibrations at the end of the run (up-lifting motion), that generally corresponds to searching for the target at the end of the run.
This is a problem addressed by the PID++ algorithm, and more generally, addressing all four (4) motion control types with a single algorithm, while not requiring any sort of adjustment or reconfiguration. Additionally, the algorithm must be computationally lightweight, and as such, be able to execute well on even a small microcontroller (MCU) such as the Arduino Uno.

1.3. Key Contributions

This article proposes to overcome the existing hurdles of motion control systems tailored for specific applications to exhibit a rather generalized computationally lightweight humanoid motion control behavior. The basic PID loop is generally used for the implementation of motion control but suffers from having only static coefficients. The main idea of the work presented in this paper is to define a radically new, simple, and computationally lightweight approach to humanoid motion control, which has the basic PID at its heart. A new PID controller algorithm called PID++ is proposed in this work that uses minor adjustments with basic arithmetic, based on the real-time encoder position input, to achieve a stable, precise, controlled, dynamic, adaptive control system, for linear motion control, in any direction regardless of load.
The proposed PID++ algorithm is able to perform any of the 4 types of motion control, independent of weight, all without any reprogramming, adjustments or foreknowledge/transfer function, of any kind, just like humans do all the time, but, with the speed, precision, and accuracy of a computer controlled machine. The algorithm is even able to cope with changes in load during the middle of a run.
The PID++ assumes linearity of control and that there will be no delays in the control feedback, encompassing the majority of motion control applications. The machine executing the PID++ algorithm will never be asked to run with loads beyond its mechanical abilities.
With basic arithmetic, minor incremental adjustments based on real-time input, has been made to achieve a stable, controlled, dynamic, adaptive control system, for linear motion control, in any direction and with any load. With no PID coefficients initially specified, the proposed PID++ algorithm dynamically adjusts and updates the PID coefficients K p , K i and K d periodically. In addition, no database of values is required to be stored as only the current and previous values of the sensed position with an accurate time base are used in the computations and overwritten in each read interval, eliminating the need of deploying much memory for storing and using vectors or matrices. The simplicity of the basic arithmetic computations, done periodically as the run progresses, makes the algorithm computationally lightweight. The PID++ algorithm allows adaptive motion control to be feasibly implemented on even the smallest microcontrollers (MCU) using a single command and without the need of reprogramming or reconfiguration. In this article, the implementation of the PID++ algorithm is done on a simple Arduino Uno.
The PID++ is designed to be a complete motion control algorithm handling every detail of the motion control run from start to finish, and does so with the human-like characteristics of adaptability and coping with adverse conditions, all in real time. The implementation, results and comparisons support these contribution claims.

1.4. Paper Organization

The remainder of this paper is organized as follows. Section 2 glances at prior related work in the literature regarding motion control. The development of the proposed solution is described in Section 3. The proposed PID++ algorithm is explained in detail in Section 4. The experimental results for various scenarios and runs are presented in Section 5. Comparison discussion, computational complexity analysis, limitations of the algorithm and applications of the proposed work are also presented later in Section 5. Finally, concluding remarks and future directions appear in Section 6.

2. Related Work

For as long as humans have been on planet Earth, people have naturally and effortlessly been able to control their neural motor activities to be able to interact and shape the world around them. Today, the question is: can an algorithm be devised to endow a machine with the same degree of motor control as that of a single muscle of the human body controlled by the human brain?
To date, the work in this field [3,4,5,6,7,8,9,10,11,12,13] is primarily divided into four categories. All are computationally intensive, and none offer a unified approach to complete motion control. The four categories are:
(a)
Single Neuron [3,4,5];
(b)
Fuzzy Logic [6,7,8,9,10,11];
(c)
Self-Tuning [12,13];
(d)
Model Reference (based on the Laplace Transform) [13].
What is most notable about all of these references is that each is geared to a particular application, and not for generalized motion control. Moreover, they all run on either high-speed CPUs such as a Digital Signal Processor (DSP) or specialized hardware.
The work in [3] uses a Single Neuron to make PID adjustments for the motion of a mechanical arm. The work, however, focuses on specifically the noted application. The authors in [4] proposed to improve the Single Neuron PID approach using Fuzzy Logic gain control, focusing on nonlinear and time delay control. While there is no doubt a need for nonlinear and/or time delayed control, it is noteworthy to mention that 90% of motion control is with linear systems that do not have any delays in the control feedback [14]. The authors in [5] use a Single Neuron approach to tune the PID, only to control the lateral motion of an automobile driving down a road. The authors of these Single Neuron based designs achieve plausible results for the intended motion control applications. However, the computational complexity of such designs are high, making it impractical to be implemented on lightweight controllers, especially if retraining is required.
The idea presented in [6] is a simulation study of the comparison of the classical PID with a Fuzzy Logic tuned PID related to hydraulics. The work presented credible results, but is tailored for the very specific application of hydraulics. The authors in [7] use a high-speed Application Specific Integrated Circuit (ASIC) to implement the Fuzzy Logic controlled tuning of the PID, strictly for aircraft roll control. The computational complexity and costume-logic requirements of this design for aircraft roll control calls for implementation in specialized hardware devices such as ASICs, which are not reprogrammable or reconfigurable. In [8], the authors use a Digital Signal Processor (DSP) to execute a Fuzzy Logic based self-tuned PID to overcome servo deficiencies such as nonlinearity, and the servo lag phenomena. DSP processors allow for complex and nonlinear math functions required for controlling servo systems, but rather fall in the category of computationally complex (heavy) devices. The authors in [9] use Fuzzy Logic to tune the PID for improved performance in the robot soccer game. The work in [10] is another Fuzzy Logic attempt to tune a PID for improved performance in the game of robot soccer. These work focus on the specific robot soccer game application and obtain reasonable results, but cannot be generalized for other motion control applications. The work in [11] is a Fuzzy Logic approach to tuning a PID for purposes of compensating for increased friction on a solar tracker. The work relies on specifying the fuzzy rules for motion control particularly applied to a solar tracker, and thus would require defining new rules for other types of motion control.
The authors in [12] use traditional Self-Tuning of the PID controller on a high-end DSP to improve robot motion control. The idea of [13] is another attempt at PID adjustment for aircraft roll control by using two different approaches to tune the PID to improve performance: (1) traditional Self-Tuning, and (2) using a predefined model (Laplace System Transfer Function) as a means to adjust the PID. These approaches deal with the transfer function of the process/system as well as the PID functions in the Laplace mathematical domain. For such methods, the specific application along with the Laplace transform of the control process should be known, or computed prior to adjusting the PID functionality. These techniques cannot perform with an unknown control process Laplace transform (referring to the process/plant box in Figure 1), and thus are not suitable for generalized motion control.
To achieve robustness, other related work such as [15,16] discuss the use of evolutionary algorithms such as particle swarm optimization (PSO), artificial bee colony (ABC) and cuckoo search algorithms to optimize PID tuning under internal and external disturbances. These work present promising results for PID adjustment, however focus on specific applications such as automatic voltage regulator (AVR) with time delay.
As can be seen, generalized motion control that can be embedded in low-power and computationally lightweight hardware has not been thoroughly investigated in the literature. This paper, however, aims to tackle this problem in more detail. The proposed algorithmic approach in this paper is the simplest and most dynamically adaptive technique for PID self-tuning, providing a complete motion control solution, unlike the prior related work [3,4,5,6,7,8,9,10,11,12,13] and other algorithms [17,18,19,20,21,22,23], for generalized humanoid motion control.

3. Development of the Proposed Solution

In this paper, an algorithm is devised to approach the problem of obtaining human-like motion control operation using a low-end microcontroller, an Arduino Uno, an Arduino Motor Control Shield, Encoder Pulse Counter Shield, Gear-Motor with Integrated Encoder, Pulley Wheel, Run Start Button, and a Laboratory-grade Test Fixture with Assorted Precision Weights. The algorithm is initially developed with the aid of MATLAB simulation and MATLAB is also used for graphical output to report the algorithm responses and results of operation based on data from actual runs.
Additionally, real-time data from actual runs are reported in the Arduino IDE for detailed analysis. The actual motor operation in the Arduino IDE is coded in C programming language. The development platform and test apparatus are shown in Figure 2.

4. PID++ Algorithm Design

The PID++ algorithm is designed to provide a complete holistic solution to motion control. With a single command, a full run, from beginning to end, is executed. Figure 3a shows the overall control block diagram and Figure 3b shows the MAIN LEVEL FLOW CHART, command line parameters and operation of the PID++ algorithm.
Like the basic PID, the following Equations (2)–(6) are used. However, the output of the PID++ algorithm expressed in Equation (2) at time t, is computed based on dynamic K p , K i and K d coefficients, not initially specified.
PID Equations:
o u t p u t = K p × e r r o r + K i × i n t e g r a l + K d × d e r i v a t i v e
where,
e r r o r = X d e s i n a t i o n X c u r r e n t
where,
X c u r r e n t = e n c o d e r P o s i t i o n
i n t e g r a l = i n t e g r a l + e r r o r × d t
d e r i v a t i v e = ( e r r o r p r e v i o u s _ e r r o r ) / d t
The PID++ routine is called with a destination value ( X d e s i n a t i o n in encoder counts (or cnts), e.g., 125,000), a plateau travel speed ( V m a x in counts/ms), an acceleration ( A d e s i r e d in counts/ms 2 ), a minimum time granularity ( d t m i n in seconds, e.g., 0.005) specifying an algorithm recalculation time interval, and a physical quantization granularity tolerance called p r e c i s i o n (unitless, e.g., 0.01), as the user specified inputs. The basic PID computations are recalculated every d t m i n along with all three (3) PID coefficients K p , K i and K d . Encoder feedback is what drives this algorithm to control every aspect of its operation.
The MAIN LEVEL FLOW CHART (Figure 3b) presents the command line parameters of the PID++ algorithm in a C-like pseudo-code structure for lifting up or bringing down weights in a humanoid controlled motion fashion. The bool driveHoistLift function takes the PID++ X d e s i n a t i o n , V m a x , A d e s i r e d , d t m i n and p r e c i s i o n user input parameters. Other inputs such as the e n c o d e r P o s i t i o n are sensed every d t time intervals. In real time applications implemented in hardware, precise d t can be computed by keeping track of the current time with accuracies in the range of microseconds. Additional parameters such as the hold time for lift and maximum allowable drive interval are defined here using the ENCODER_ERROR_COUNT variable.
After variable initialization and first-pass execution through FLOW CHART #0, the program enters the main loop until the destination is reached but for no longer than a maximum allowable drive interval. In this loop of the algorithm, if the minimum time granularity has been reached, then, FLOW CHART #1 is executed, otherwise and always, the current position is checked (sensed) to determine if the destination has been reached within a target number of counts. The output is the quantified pulse width modulation (PWM) value driving the motor. This value should be within the motor’s strength and mechanical capability (PWM_LIMIT).
To develop the PID++ algorithm, we conceptualize how a typical run from one point to another (e.g., from the bottom of the platform to the top) should look like. Consider Figure 4 as a typical graph of the Speed of a run for V m a x = 120 counts/ms. The slope of the curve in different areas determines the acceleration.
The first thing to note is that the graph in Figure 4 is horizontally symmetrical about the center line of the graph to form the two (2) halves of the run. Now, there are four (4) main areas of the Speed graph (going from left to right in blue) to form a symmetrical trapezoid. The first is the linear acceleration zone up to the velocity of 120 counts/ms. Next comes the flat (constant velocity) plateau phase at 120 count/ms. From here we enter the end-of-run deceleration zone which gets us very close to the X d e s t i n a t i o n . Finally, there is the search phase which brings the run to X d e s t i n a t i o n within a tolerance as a function of the lifted weight. The heavier the weight for a given motor size, the looser the tolerance that is required for stable operation.
With this background, there are three (3) major aspects that comprise the PID++ algorithm:
  • The “ P h a s e ” structure;
  • The 3-Dimensional Polynomial;
  • The “ h o l d C o u n t ” computation for the End of Run Deceleration Zone.
The structure of the PID++ algorithm is explained hereafter in more detail through describing the these three main aspects along with the related illustrated flow charts.

4.1. The Phase Structure

In terms of the detailed operation, the PID++ algorithm has nine specific areas of operation called phases. These phases correlate to the “ p h a s e ” of the run that the algorithm is in the process of executing:
  • Phase 0: Initialization and first pass at time = 0. This is where the run preparations are made and initial setup is carried out.
  • Phase 1: First half of run, velocity is too low. This points to the initial acceleration zone trying to reach the plateau phase.
  • Phase 2: First half of run, velocity is too high. In this case, the system is not yet ready to begin the plateau phase but somehow managed to overshoot the V m a x .
  • Phase 3: First or second half of run, velocity has plateaued, and running at the specified velocity ( V m a x ).
  • Phase 4: Second half of run, before the end of run deceleration zone, plateaued, but velocity has become too low over time. This refers to the plateau phase but traveling at a speed below tolerance ( V m a x p r e c i s i o n ).
  • Phase 5: Second half of run, before the end of run deceleration zone, plateaued, but velocity has become too high over time. This is in the plateau phase but traveling at a speed above tolerance ( V m a x + p r e c i s i o n ).
  • Phase 6: End of run deceleration zone. This is where the system is ready to begin decelerating to the X d e s t i n a t i o n .
  • Phase 7: Projected velocity at the destination is outside of “ p r e c i s i o n ”. This refers to when the system is decelerating to the target but the projected speed at the target is not within “ p r e c i s i o n ”.
  • Phase 8: Projected velocity at the destination is within “ p r e c i s i o n ”. This refers to when the system is decelerating to the target and the projected speed at the target is within “ p r e c i s i o n ”.

4.2. The 3-Dimensional Polynomial

The “ d i v ” 3-dimensional polynomial is the f ( V m a x ) polynomial and the g ( A d e s i r e d ) conjoined by subtraction. This “ d i v ” value refers to the division of time for K p , K i and K d adjustments. By properly dividing time for a specified V m a x and A d e s i r e d , a stable and accurate response is obtainable. This 3-dimensional polynomial is derived empirically and is scalable. This value is calculated at the beginning of the run in Phase 0, and is static until the run reaches the end of run deceleration zone, where it then becomes dynamic (due to an augmentation carried out in the third aspect of the PID++ algorithm).
Upon exiting the main loop (MAIN LEVEL FLOW CHART), if the destination has been reached, the PID++ routine returns success otherwise the routine returns failure.
Figure 5 shows FLOW CHART #0. The first step of this section is the one-time calculation of the “ d i v ” parameter through the execution of a 3-dimensional polynomial (Equations (7)–(9)). This polynomial takes the V m a x and A d e s i r e d parameters as inputs. See Figure 6 and Figure 7.
d i v = f ( V m a x ) g ( A d e s i r e d )
f ( V m a x ) = ( 14871.428374977424 + ( V m a x × 58.963462093835631 ) + ( V m a x 2 × ( 4.4655757092373358 ) ) + ( V m a x 3 × 0.024514638540135931 ) )
g ( A d e s i r e d ) = ( 1402.4961019577061 + ( A d e s i r e d × 20724.637961900153 ) + ( A d e s i r e d 2 × ( 70942.626241111837 ) ) + ( A d e s i r e d 3 × ( 6557.7905889448139 ) )
This “ d i v ” variable is used in the on-the-fly tuning process of the PID++, for updating the PID coefficients, performed in real-time throughout the run. These equations have been developed empirically with much data taken in actual runs. From all these data, the “ d i v ” parameter equations were derived using regression and curve fitting models.
The f ( V m a x ) portion of the “ d i v ” value relative to a precise time base “ d t ” allows for the proper update rate of the basic PID coefficients to affect a desired plateau speed. The slope of the trapezoidal acceleration and deceleration is affected by the g ( A d e s i r e d ) portion of the “ d i v ” variable by augmenting the way the f ( V m a x ) functions, by either enhancing or retarding its effect. By doing so, the slope of the trapezoid is affected on the way to the V m a x speed and from the V m a x speed back to stop motion.
The coefficients of the polynomials are constant values found after curve fitting where the variables of the polynomials are the V m a x and A d e s i r e d input arguments. The d i v computation is done just once at the beginning of the program and is independent of the motor process, transfer function or load weights. Therefore, this developed 3D polynomial of d i v is used consistently the same in way in any run, and only depends on the V m a x and A d e s i r e d input values. By making small adjustments as needed on the way to the destination on a periodic basis, minor modification in real-time is all that needs to be done. This can be done with simple arithmetic, thus with a low computational cost.
After this “ d i v ” calculation, the rest of FLOW CHART #0, is the first pass execution of the PID++ algorithm, at time = 0. This code does an initialization of running variables and PID coefficients at this point in time. From here, the first PID calculation is made and outputs (Equations (2)–(6)), held within fixed limits, are sent to the motor to begin the run.
Figure 8 shows FLOW CHART #1 which shows the output control structure of the PID++ algorithm which is executed periodically in the Main Loop, every d t m i n . At this programming level, a set of PID coefficients ( K p , K i , K d ) have already been set. Using these current coefficient values, the running output (Equation (2)) is determined and used to control the motor, with adjustments made every d t depending on the phase of the run.
FLOW CHART #1 begins by confirming that at least a d t m i n time period has elapsed since the last execution of this flow chart. If so, the current position and velocity is retrieved from the encoder. The “ e r r o r ” used with the proportional term of the PID is calculated (Equations (3) and (4)). If the algorithm is not currently in Phase 3, the integral term is computed (Equation (5)). However, if the algorithm is in Phase 3, no adjustment in the integral term is necessary. Now, the derivative (Equation (6)) and run “ c o m p l e t i o n ” fraction (Equation (10)) is calculated.
c o m p l e t i o n = 1 e r r o r ( X d e s t i n a t i o n X s t a r t ) = ( X c u r r e n t X s t a r t ) ( X d e s t i n a t i o n X s t a r t )
FLOW CHART #2 is then executed to determine any retuning of the PID coefficients. As a programmatic simplification, K d = K p / 3.0 is used. With all variables now updated, the PID calculation is made and outputs (Equation (2)), held within fixed limits, are sent to the motor for the current iteration of the run, and repeated for the duration of the run. If the motor should overshoot the destination, the output is negated and attenuated as a means to drive the motor back to the precise destination target ( X d e s t i n a t i o n ), within a fixed count tolerance.
Figure 9 shows FLOW CHART #2 which begins the low-level coefficient tuning code. The flow chart that gets executed next (FLOW CHART #3, #4, or #5), is determined in this section of the code based on the current value of the run “ c o m p l e t i o n ” fraction (Equation (10)).
Figure 10 shows FLOW CHART #3 for the retuning of the PID coefficients during the first half of the run. The objective of the first half of the run is to accelerate the motor at the A d e s i r e d specification to the V m a x velocity and plateau there into the second half of the run, and make adjustments if necessary to maintain V m a x within “ p r e c i s i o n ”.
Key to the computationally lightweight nature of the PID++ algorithm, is small adjustments done with just basic arithmetic.
Using the “ d i v ” value calculated only once at the beginning of the run, based on the 3-dimensional polynomial, which is a confluence of V m a x and A d e s i r e d into this single floating point number “ d i v ”, the K p and K i coefficients are given minor adjustment as needed.
In Figure 10, if the current velocity ( V c u r r e n t ) is under V m a x , as would be the case during the initial acceleration of the run, K p and K i are increased by “ d t / d i v ” ( K p = K p + d t / d i v , K i = K i + d t / d i v ). Once the V m a x speed is reached, the position is marked ( X d e c e l e r a t e is calculated for the 2nd half of the run to form a symmetrical trapezoid acceleration/deceleration profile). Should there be an over-speed situation, only K i is decreased by “ d t / d i v ( K i = K i d t / d i v ) and K p is left unchanged. During the plateau phase while running at V m a x to within “ p r e c i s i o n ”, no adjustments to the K p or K i coefficients are made.
Figure 11 shows FLOW CHART #4 which continues the plateau through the 2nd half of the run, up to the end of run deceleration zone begun at X d e c e l e r a t e . If V c u r r e n t is under V m a x , K p and K i are increased by “ d t / d i v ” ( K p = K p + d t / d i v , K i = K i + d t / d i v ). Should there be an over-speed situation, only K i is decreased by “ d t / d i v ” and K p is left unchanged. During this plateau phase while running at V m a x to within “ p r e c i s i o n ”, no adjustments to the K p or K i coefficients are made.

4.3. The “ h o l d C o u n t ” for the End of Run Deceleration Zone

During the run, X d e c e l e r a t e is the point where the motor has completed most of the run and must decelerate to a stop by the time it hits the X d e s t i n a t i o n . Figure 12 shows FLOW CHART #5 which begins at the X d e c e l e r a t e point in the run. To perform proper deceleration, a “ p r o j e c t i o n ” calculation of the speed is made by looking at the deceleration rate (slope) relative to the remaining distance to travel to get to the X d e s t i n a t i o n (Equation (11)).
p r o j e c t i o n = a b s ( ( V c u r r e n t V l a s t ) ( X c u r r e n t X l a s t ) × X d e s t i n a t i o n + V c u r r e n t ( V c u r r e n t V l a s t ) ( X c u r r e n t X l a s t ) × X c u r r e n t )
If at this point in time, the “ p r o j e c t i o n ” is within the “ p r e c i s i o n ” then a “ h o l d C o u n t ” variable (which is only used in this section of the code) counts the number of times the “ p r o j e c t i o n ” is within the “ p r e c i s i o n ”. This “ h o l d C o u n t ” value, which can increase as the motor approaches the destination, is used to dynamically augment the statically calculated “ d i v ” value, derived from the 3-dimensional polynomial. In this case, K p is untouched, and K i is then increased by “ d t / ( d i v + h o l d C o u n t ) ”. That is, K i = K i + d t / ( d i v + h o l d C o u n t ) .
If on the other hand, the “ p r o j e c t i o n ” is outside of the “ p r e c i s i o n ”, then K p is increased by “ d t / ( d i v + h o l d C o u n t ) ”, and K i is decreased by “ d t / ( d i v + h o l d C o u n t ) ”. That is, K p = K p + d t / ( d i v + h o l d C o u n t ) , K i = K i d t / ( d i v + h o l d C o u n t ) .

4.4. Overall PID++ Algorithm Behavior

The PID++ algorithm periodically senses the e n c o d e r P o s i t i o n and computes the PID++ output based on periodic adjustments of K p , K i and K d parameters to reach the destination in a humanoid controlled motion fashion. The current velocity V c u r r e n t can directly be sensed from the hardware interface or computed algorithmically by calculating the difference between the sensed e n c o d e r P o s i t i o n in every d t interval.
The K p , K i and K d parameters are updated as follows before the end of run deceleration zone:
If velocity is too low ( V c u r r e n t < V m a x p r e c i s i o n ) : K p = K p + d t / d i v K i = K i + d t / d i v
If velocity is too high ( V c u r r e n t > V m a x + p r e c i s i o n ) : K i = K i d t / d i v
If velocity is correct ( V c u r r e n t = = V m a x ± p r e c i s i o n ) : Do nothing - > No changes applied to K p , K i and K d
Throughout the entire run , as an algorithmic simplification : K d = K p / 3
For the end of run deceleration zone, the “ h o l d C o u n t ” parameter also comes into the picture to augment the d i v value for K p , K i and K d adjustments.

5. Results

To observe the operation of the proposed PID++ algorithm, many scenarios with different travel distances, speeds, trapezoidal acceleration/deceleration profiles, and weight quantities were tested on a single software compilation. Different load weights ranging from 0 g up to 1 Kg were used. For the purpose of illustration, the experimental results with 2 different weights are graphically demonstrated in this section of the paper. Further, a video demonstration (seen in the Supplementary Materials) has been produced, showing the running apparatus with 5 different weights.

5.1. Graphical Responses

The Distance Traveled (Encoder Position in cnts), Output (or Experiment Output) of the PID++ algorithm applied to the motor (represented as PWM values), and the Speed of the motion in each test scenario, are graphically shown in each horizontal 3-plot Figure of Section 5.1. On the axes, Time is shown in seconds, Position is shown in cnts and Speed is shown in cnts/ms.
All the plots corresponding to the velocity (Speed) graphs in Figure 13, Figure 14, Figure 15, Figure 16, Figure 17, Figure 18, Figure 19, Figure 20, Figure 21, Figure 22, Figure 23, Figure 24, Figure 25, Figure 26, Figure 27, Figure 28, Figure 29, Figure 30, Figure 31 and Figure 32 hereafter follow the four (4) main areas (as explained in a typical PID++ run depicted in Figure 4): Initial Acceleration Zone, followed by a Plateau Phase, followed by the End of Run Deceleration Zone, and then ending with a Search Phase.
Figure 13 and Figure 14 begin the UP direction MATLAB output graphs of the PID++ as specified, with the plateau and trapezoidal values of of V m a x = 30 cnts/ms, A d e s i r e d = 0.055 cnts/ms 2 using two different weights of 10 g and 1 Kg. Figure 13 Output graph shows the searching at the end of the run to find the correct X d e s t i n a t i o n . Figure 14 Speed and Position graphs show the learning process involved in dealing with a relatively large weight to maintain specification.
Figure 15 and Figure 16 show the MATLAB output of the PID++ as specified differently, with the correct plateau and trapezoidal values. Both Figure 15 and Figure 16 Output graphs show a small amount of searching at the end of the run to find the correct X d e s t i n a t i o n . Figure 16 Speed and Position graphs show a decreased learning process involved with a larger weight due to the higher V m a x .
Figure 17 and Figure 18 show the MATLAB output of the PID++ as specified, with the new plateau and trapezoidal values of V m a x = 30 cnts/ms, A d e s i r e d = 0.015 cnts/ms 2 . Figure 19 and Figure 20 show the MATLAB output of the PID++ as specified, with other newly specified plateau and trapezoidal values. Figure 17 and Figure 19 Output graphs show the searching at the end of the run to find the correct X d e s t i n a t i o n . Figure 20 Speed and Position graphs show the learning process involved in dealing with a relatively large weight to maintain specification.
Figure 21 and Figure 22 show the MATLAB output of the remaining UP graphs of the PID++ as newly specified, with the correct plateau and trapezoidal values. Both Figure 21 and Figure 22 Output graphs show some searching at the end of the run to find the correct X d e s t i n a t i o n . Figure 22 Speed and Position graphs show a decreased learning process involved with a larger weight due to the higher V m a x .
Figure 23 and Figure 24 begin the MATLAB output graphs in the DOWN direction. The decreased output level for the heavier weight can be noticed because of gravity in the DOWN direction. Figure 23 and Figure 24 show the MATLAB output of the PID++ as specified, with the correct plateau and trapezoidal values of V m a x = 30 cnts/ms, A d e s i r e d = 0.015 cnts/ms 2 . Figure 23 Output graph shows the searching at the end of the run to find the correct X d e s t i n a t i o n . Figure 24 Speed and Position graphs show that the learning process is not involved with the DOWN direction because of gravity assistance.
Figure 25 and Figure 26 show the MATLAB output of the PID++ as differently specified, with the correct plateau and trapezoidal values. Both Output graphs show the searching at the end of the run to find the correct X d e s t i n a t i o n . Figure 26 Speed and Position graphs show that the learning process is not involved with the DOWN direction because of gravity assistance.
Figure 27 and Figure 28 show the MATLAB output of the PID++ as newly specified, with the correct plateau and trapezoidal values. Both Output graphs show the searching at the end of the run to find the correct X d e s t i n a t i o n . Figure 28 Speed and Position graphs show that the learning process is not involved with the DOWN direction because of gravity assistance.
Figure 29 and Figure 30 show the MATLAB output of the PID++ differently specified, with the correct plateau and trapezoidal values. Figure 30 Output graph shows the searching at the end of the run to find the correct X d e s t i n a t i o n . Figure 30 Speed and Position graphs show that the learning process is not involved with the DOWN direction because of gravity assistance.
Figure 31 and Figure 32 show the MATLAB output of the PID++ as newly specified, with the correct plateau and trapezoidal values. Figure 31 Output graph shows the searching at the end of the run to find the correct X d e s t i n a t i o n . Figure 32 Speed and Position graphs show that the learning process is not involved with the DOWN direction because of gravity assistance.
To observe the dynamic nature of the PID++ coefficients, K p , K i and K d values are plotted with respect to time for a sample scenario run of V m a x = 120 cnts/ms, A d e s i r e d = 0.055 cnts/ms 2 for the two weight loads of 10 g and 1 Kg in the UP direction. Figure 33 and Figure 34 show the graphs of these parameters.
It is clearly seen that the K p , K i and K d parameters of PID++ do not remain constant and periodically change to adjust the motion to the desired trapezoidal profile operation.
Overall, from the graphical responses, it is clearly observed that in all runs with PID++, the desired distance traveled (0–125,000 cnts) in the UP direction and (125,000–0 cnts) in the DOWN direction, and the user specified V m a x with the desired acceleration/deceleration were correctly achieved from the plateau and trapezoidal profiles for different weight loads.
In addition, the Output graphs clearly show larger values required for the heavier weight in the UP direction. In the DOWN direction, as gravity also comes into picture to assist the motion, the Output graphs show negative responses where higher values are again correctly observed for the larger weight.

5.2. PID++ Comparison to Other Approaches

To compare the PID++ operation with other lightweight motion control mechanisms, the basic PID was selected.
Figure 35 and Figure 36 show the MATLAB output for the basic/standard PID in the UP direction with 10 g and 1 Kg and its poor response. As can be seen, the destination of 125,000 cnts is not reached and/or the speed and acceleration are lacking control, showing that the basic PID needs readjustment of coefficients for different weights. Figure 37 and Figure 38 also show the basic PID with 10 g and 1 Kg in the DOWN direction and its poor response. No symmetrical/trapezoidal profile is observed in the runs. The basic PID clearly fails to provide a controlled motion or even reach the specified destination when changing the load/weights.
Unlike every other approach for intelligent motion control including (1) Basic PID, (2) Single Neuron (Deep Learning), (3) Fuzzy Logic, (4) Classic Self-tuning and (5) Model Reference (Laplace Transform), the PID++ algorithm requires no pre-knowledge of the system of any kind, just like humans do all the time. Furthermore, no computationally costly math is required and therefore the system is able to run with ease on a standard microcontroller and not a DSP which most of the other techniques (2–5) require. The PID++ algorithm (unlike all of the other techniques) also comes with complete run motion control included, and therefore, can be implemented with a single command line entry:
e.g., (call PID++(125,000, 120.0, 0.045, 0.005, 0.01);
This command is all that is required to run the motor from the current location to encoder position 125,000 at a speed of 120.0 counts/ms, a symmetrical trapezoidal acceleration/deceleration profile of 0.045 counts/ms 2 , a d t m i n of 5 ms, and a motion p r e c i s i o n of 1%.

5.3. Computational Complexity Analysis

The computational complexity of the PID++ algorithm in Big O notations is O ( n / ( d t m i n × 1000 ) ) , where n refers to the total number of encoder position samples (which is taken every 1ms) and d t m i n is some multiple of this sample rate. This is while neural networks require O ( n 4 ) for forward propagation and O ( n 5 ) for back propagation (n being a parameter of the network structure, e.g., number of layers/neurons, or iterations).
As no other algorithm including (1) Basic PID, (2) Single Neuron (Deep Learning), (3) Fuzzy Logic, (4) Classic Self-tuning and (5) Model Reference (Laplace Transform) is even capable of complete run motion control, as is the case with the PID++, no comparable Big O value for these different other approaches can be put forth for a comparison.

5.4. Limitations

When the PID++ algorithm is applied and used properly, the results are quite remarkable, as shown and described in this paper. To obtain this though, certain simple electrical and mechanical guidelines must be followed:
  • The motor must be properly sized for the amount of load required to be moved or lifted.
  • A d e s i r e d values must be set appropriately and reasonably for the V m a x speed specified for the run, otherwise V m a x may never be reached.
  • V m a x should be set to reasonable values depending on the size of the motor and the given mass to be moved or lifted in the run.
  • X d e s t i n a t i o n should be a reachable value.
  • The motor power supply should be sized properly for the motor size and size of the masses to be moved or lifted.
  • For large loads lifted by relatively small motors, the ENCODER_TARGET_COUNT will need to be enlarged to allow the motor to more easily find the X d e s t i n a t i o n . This is just like human behavior.

5.5. PID++ Algorithm Applications

The PID++ algorithm is applicable to a variety of sectors:
  • Commercial: printers, toys, appliances, etc.
  • Industrial: Computer Numeric Control (CNC) machines, 3D printers, robotics, general motion control.
  • Biomedical: bionics, prosthetics, artificial limbs, artificial implants, robotic surgery.
  • Space: robotic landers, Lunar and Martian Geological Exploration.
All of these applications, no matter what sector it pertains to, will require accurate, adaptive, low computational cost, linear motion control. The PID++ algorithm is useful in all of these cases, with or without load variations.

6. Conclusions and Future Directions

The PID++ algorithm uses minor adjustments in tuning on a periodic basis to achieve extremely precise, humanoid motion control. Whereas most PID controllers require that the transfer function of the process be known and that the PID coefficients be configured for that specific process, generally represented as the Laplace transform, the proposed PID++ algorithm can operate with any linear motion control process, without any foreknowledge of the system transfer function and regardless of load.
The proposed algorithm shows that human-like motion control is possible and with accuracy and precision only obtainable with a computer-controlled system. Additionally, it is demonstrated to be computationally lightweight as it successfully executes with precision and speed on just an Arduino Uno.
Many different travel distances, speeds, trapezoidal acceleration/deceleration profiles, and weight quantities were tested with a single software executable, and demonstrated to operate successfully.
In the future, testing with larger electric motors and heavier loads will be performed. Moreover, the PID++ algorithm will be tested with other types of propulsion systems with a Pulse Width Modulation (PWM) input as well. Furthermore, beta testing with commercial, industrial, biomedical, and space applications will be planned out and pursued.

Supplementary Materials

The following are available online at https://www.mdpi.com/1424-8220/21/2/456/s1. A video demonstration of the PID++ algorithm has been produced, showing the running apparatus with 5 different weights.

Author Contributions

Supervision, M.F.; Writing—original draft preparation, T.F.A.; Writing—review and editing, M.F.; Conceptualization, T.F.A. and M.F.; Methodology, T.F.A. and M.F.; Software, T.F.A. and M.F.; Validation, T.F.A. and M.F.; Formal Analysis, T.F.A. and M.F.; Investigation, T.F.A. and M.F.; Resources, T.F.A. and M.F.; Data Curation, T.F.A. and M.F.; Visualization, T.F.A.; and Project Administration, M.F. All authors have read and agreed to the published version of the manuscript.

Funding

This research received no external funding.

Institutional Review Board Statement.

Not applicable.

Informed Consent Statement.

Not applicable.

Data Availability Statement

The data supporting the reported results presented in this study have been created by the authors and are openly available in the Code Ocean public repository, at https://doi.org/10.24433/CO.6585291.v2.

Conflicts of Interest

The authors declare no conflict of interest.

References

  1. Ang, K.H.; Chong, G.; Li, Y. PID control system analysis, design, and technology. IEEE Trans. Control. Syst. Technol. 2005, 13, 559–576. [Google Scholar]
  2. Resnick, R.; Halliday, D. Physics: Combined Ed.; John Wiley & Sons: New York, NY, USA, 1966. [Google Scholar]
  3. Dehghani, S.; Taghirad, H.D.; Darainy, M. Self-tuning dynamic impedance control for human arm motion. In Proceedings of the 17th Iranian Conference of Biomedical Engineering (ICBME2010), Isfahan, Iran, 3–4 November 2010; pp. 1–5. [Google Scholar]
  4. Xing, B.Y.; Yu, L.Y.; Zhou, Z.K. Composite single neural PID controller based on fuzzy self-tuning gain and RBF network identification. In Proceedings of the 26th Chinese Control and Decision Conference (CCDC), Changsha, China, 31 May–2 June 2014; pp. 606–611. [Google Scholar]
  5. Jun, G.; Huapeng, Z. Research on Adaptive control method of autonomous vehicle lateral motion. In Proceedings of the International Conference on Computer Application and System Modeling (ICCASM), Taiyuan, China, 22–24 October 2010; Volume 8, pp. V8–V320. [Google Scholar]
  6. Papoutsidakis, M.; Symeonaki, E.; Tseles, D. The I-term influence in simulating hydraulics: A study of classical and intelligent control. In Proceedings of the World Congress on Sustainable Technologies (WCST), London, UK, 8–10 December 2016; pp. 79–84. [Google Scholar]
  7. John, S.; Rasheed, A.I.; Reddy, V.K. ASIC implementation of fuzzy-PID controller for aircraft roll control. In Proceedings of the International Conference on Circuits, Controls and Communications (CCUBE), Bengaluru, India, 27–28 December 2013; pp. 1–6. [Google Scholar]
  8. Ngo, H.Q.T.; Nguyen, T.P.; Le, T.S.; Huynh, V.N.S.; Tran, H.A.M. Experimental design of PC-based servo system. In Proceedings of the International Conference on System Science and Engineering (ICSSE), Ho Chi Minh City, Vietnam, 21–23 July 2017; pp. 733–738. [Google Scholar]
  9. Wu, Y.; Wang, H. Application of Fuzzy Self-tuning PID controller in soccer robot. In Proceedings of the IEEE International Symposium on Knowledge Acquisition and Modeling Workshop, Wuhan, China, 21–22 December 2008; pp. 14–17. [Google Scholar]
  10. Qi, T.; Li, C.; Kai, W.; Yan, L. Research on motion control of mobile robot with fuzzy PID arithmetic. In Proceedings of the 9th International Conference on Electronic Measurement & Instruments (ICEMI), Beijing, China, 16–19 August 2009; pp. 3–363. [Google Scholar]
  11. Gaballa, M.S.; Bahgat, M.; Abdel-Ghany, A.G.M. Self-Tuning of an FLC-PID controller of a dual-axis sun tracker photo-voltaic panel based on rise-time-observer method. In Proceedings of the 19th International Middle East Power Systems Conference (MEPCON), Cairo, Egypt, 19–21 December 2017; pp. 722–727. [Google Scholar]
  12. Xiao, H.; Wang, S. Auto-tuning PID module of robot motion system. In Proceedings of the 6th IEEE Conference on Industrial Electronics and Applications, Beijing, China, 21–23 June 2011; pp. 668–673. [Google Scholar]
  13. Singh, U.; Pal, N.S. Roll angle control of an aircraft using adaptive controllers. In Proceedings of the International Conference on Automation, Computational and Technology Management (ICACTM), London, UK, 24–26 April 2019; pp. 143–147. [Google Scholar]
  14. Yao, B.; Jiang, C. Advanced motion control: From classical PID to nonlinear adaptive robust control. In Proceedings of the 2010 11th IEEE International Workshop on Advanced Motion Control (AMC), Niigata, Japan, 21–24 March 2010; pp. 815–829. [Google Scholar]
  15. Bingul, Z.; Karahan, O. Comparison of PID and FOPID controllers tuned by PSO and ABC algorithms for unstable and integrating systems with time delay. Optim. Control. Appl. Methods 2018, 39, 1431–1450. [Google Scholar] [CrossRef]
  16. Bingul, Z.; Karahan, O. A novel performance criterion approach to optimum design of PID controller using cuckoo search algorithm for AVR system. J. Frankl. Inst. 2018, 355, 5534–5559. [Google Scholar] [CrossRef]
  17. Abdelmaksoud, S.I.; Mailah, M.; Abdallah, A.M. Robust intelligent self-tuning active force control of a quadrotor with improved body jerk performance. IEEE Access 2020, 8, 150037–150050. [Google Scholar] [CrossRef]
  18. Nakhaeinia, D.; Payeur, P.; Laganiere, R. A mode-switching motion control system for reactive interaction and surface following using industrial robots. IEEE/CAA J. Autom. Sin. 2018, 5, 670–682. [Google Scholar] [CrossRef]
  19. Gaballa, M.S.; Bahgat, M.; Abdel-Ghany, A.G.M. A novel technique for online self-tuning of fractional order PID, based on takaji-sugeno fuzzy. In Proceedings of the 19th International Middle East Power Systems Conference (MEPCON), Cairo, Egypt, 19–21 December 2017; pp. 1362–1368. [Google Scholar]
  20. Gong, S.; Ding, X.; Wu, W.; Ren, H. Application of a self-tuning two degree of freedom PID controller based on fuzzy inference for PMSM. In Proceedings of the International Conference on Electrical Machines and Systems, Wuhan, China, 17–20 October 2008; pp. 1629–1632. [Google Scholar]
  21. Ishak, N.; Tajjudin, M.; Adnan, R.; Ismail, H.; Sam, Y.M. Real-time application of self-tuning PID in electro-hydraulic actuator. In Proceedings of the IEEE International Conference on Control System, Computing and Engineering, Penang, Malaysia, 25–27 November 2011; pp. 364–368. [Google Scholar]
  22. Wu, H.; Handroos, H. Hybrid fuzzy self-tuning PID controller for a parallel manipulator. In Proceedings of the 5th World Congress on Intelligent Control and Automation (IEEE Cat. No.04EX788), Hangzhou, China, 15–19 June 2004; Volume 3, pp. 2545–2549. [Google Scholar] [CrossRef]
  23. Yuan, L.; Cui, J.; Pan, M.; Liu, Y. Design of aerodynamics missile controller based on adaptive fuzzy PID. Proc. Int. Conf. Meas. Inf. Control 2012, 3, 712–716. [Google Scholar] [CrossRef]
Figure 1. Basic PID block diagram.
Figure 1. Basic PID block diagram.
Sensors 21 00456 g001
Figure 2. PID++ development and test apparatus.
Figure 2. PID++ development and test apparatus.
Sensors 21 00456 g002
Figure 3. (a) PID++ control block diagram. (b) PID++ Flow Chart—Main Level.
Figure 3. (a) PID++ control block diagram. (b) PID++ Flow Chart—Main Level.
Sensors 21 00456 g003
Figure 4. Speed graph of a typical run with PID++ motion control.
Figure 4. Speed graph of a typical run with PID++ motion control.
Sensors 21 00456 g004
Figure 5. PID++ Flow Chart #0 - Initialization Stage.
Figure 5. PID++ Flow Chart #0 - Initialization Stage.
Sensors 21 00456 g005
Figure 6. PID++ Vmax polynomial.
Figure 6. PID++ Vmax polynomial.
Sensors 21 00456 g006
Figure 7. PID++ Adesired polynomial.
Figure 7. PID++ Adesired polynomial.
Sensors 21 00456 g007
Figure 8. PID++ Flow Chart #1—output control level.
Figure 8. PID++ Flow Chart #1—output control level.
Sensors 21 00456 g008
Figure 9. PID++ Flow Chart #2—completion control level.
Figure 9. PID++ Flow Chart #2—completion control level.
Sensors 21 00456 g009
Figure 10. PID++ Flow Chart #3—first half of run (acceleration and plateau).
Figure 10. PID++ Flow Chart #3—first half of run (acceleration and plateau).
Sensors 21 00456 g010
Figure 11. PID++ Flow Chart #4—second half of run (plateau before the end of run deceleration zone).
Figure 11. PID++ Flow Chart #4—second half of run (plateau before the end of run deceleration zone).
Sensors 21 00456 g011
Figure 12. PID++ Flow Chart #5—second half of run (end of run deceleration zone).
Figure 12. PID++ Flow Chart #5—second half of run (end of run deceleration zone).
Sensors 21 00456 g012
Figure 13. Encoder position, output and speed plots for PID++ UP operation— V m a x 30 cnts/ms, A d e s i r e d 0.055 cnts/ms 2 —10 g.
Figure 13. Encoder position, output and speed plots for PID++ UP operation— V m a x 30 cnts/ms, A d e s i r e d 0.055 cnts/ms 2 —10 g.
Sensors 21 00456 g013
Figure 14. Encoder position, output and speed plots for PID++ UP operation— V m a x 30 cnts/ms, A d e s i r e d 0.055 cnts/ms 2 —1 Kg.
Figure 14. Encoder position, output and speed plots for PID++ UP operation— V m a x 30 cnts/ms, A d e s i r e d 0.055 cnts/ms 2 —1 Kg.
Sensors 21 00456 g014
Figure 15. Encoder position, output and speed plots for PID++ UP operation— V m a x 120 cnts/ms, A d e s i r e d 0.040 cnts/ms 2 —10 g.
Figure 15. Encoder position, output and speed plots for PID++ UP operation— V m a x 120 cnts/ms, A d e s i r e d 0.040 cnts/ms 2 —10 g.
Sensors 21 00456 g015
Figure 16. Encoder position, output and speed plots for PID++ UP operation— V m a x 120 cnts/ms, A d e s i r e d 0.040 cnts/ms 2 —1 Kg.
Figure 16. Encoder position, output and speed plots for PID++ UP operation— V m a x 120 cnts/ms, A d e s i r e d 0.040 cnts/ms 2 —1 Kg.
Sensors 21 00456 g016
Figure 17. Encoder position, output and speed plots for PID++ UP operation— V m a x 30 cnts/ms, A d e s i r e d 0.015 cnts/ms 2 —10 g.
Figure 17. Encoder position, output and speed plots for PID++ UP operation— V m a x 30 cnts/ms, A d e s i r e d 0.015 cnts/ms 2 —10 g.
Sensors 21 00456 g017
Figure 18. Encoder position, output and speed plots for PID++ UP operation— V m a x 30 cnts/ms, A d e s i r e d 0.015 cnts/ms 2 —1 Kg.
Figure 18. Encoder position, output and speed plots for PID++ UP operation— V m a x 30 cnts/ms, A d e s i r e d 0.015 cnts/ms 2 —1 Kg.
Sensors 21 00456 g018
Figure 19. Encoder position, output and speed plots for PID++ UP operation— V m a x 30 cnts/ms, A d e s i r e d 0.040 cnts/ms 2 —10 g.
Figure 19. Encoder position, output and speed plots for PID++ UP operation— V m a x 30 cnts/ms, A d e s i r e d 0.040 cnts/ms 2 —10 g.
Sensors 21 00456 g019
Figure 20. Encoder position, output and speed plots for PID++ UP operation— V m a x 30 cnts/ms, A d e s i r e d 0.040 cnts/ms 2 —1 Kg.
Figure 20. Encoder position, output and speed plots for PID++ UP operation— V m a x 30 cnts/ms, A d e s i r e d 0.040 cnts/ms 2 —1 Kg.
Sensors 21 00456 g020
Figure 21. Encoder position, output and speed plots for PID++ UP operation— V m a x 120 cnts/ms, A d e s i r e d 0.055 cnts/ms 2 —10 g.
Figure 21. Encoder position, output and speed plots for PID++ UP operation— V m a x 120 cnts/ms, A d e s i r e d 0.055 cnts/ms 2 —10 g.
Sensors 21 00456 g021
Figure 22. Encoder position, output and speed plots for PID++ UP operation— V m a x 120 cnts/ms, A d e s i r e d 0.055 cnts/ms 2 —1 Kg.
Figure 22. Encoder position, output and speed plots for PID++ UP operation— V m a x 120 cnts/ms, A d e s i r e d 0.055 cnts/ms 2 —1 Kg.
Sensors 21 00456 g022
Figure 23. Encoder position, output and speed plots for PID++ DOWN operation— V m a x 30 cnts/ms, A d e s i r e d 0.015 cnts/ms 2 —10 g.
Figure 23. Encoder position, output and speed plots for PID++ DOWN operation— V m a x 30 cnts/ms, A d e s i r e d 0.015 cnts/ms 2 —10 g.
Sensors 21 00456 g023
Figure 24. Encoder position, output and speed plots for PID++ DOWN operation— V m a x 30 cnts/ms, A d e s i r e d 0.015 cnts/ms 2 —1 Kg.
Figure 24. Encoder position, output and speed plots for PID++ DOWN operation— V m a x 30 cnts/ms, A d e s i r e d 0.015 cnts/ms 2 —1 Kg.
Sensors 21 00456 g024
Figure 25. Encoder position, output and speed plots for PID++ DOWN operation— V m a x 30 cnts/ms, A d e s i r e d 0.040 cnts/ms 2 —10 g.
Figure 25. Encoder position, output and speed plots for PID++ DOWN operation— V m a x 30 cnts/ms, A d e s i r e d 0.040 cnts/ms 2 —10 g.
Sensors 21 00456 g025
Figure 26. Encoder position, output and speed plots for PID++ DOWN operation— V m a x 30 cnts/ms, A d e s i r e d 0.040 cnts/ms 2 —1 Kg.
Figure 26. Encoder position, output and speed plots for PID++ DOWN operation— V m a x 30 cnts/ms, A d e s i r e d 0.040 cnts/ms 2 —1 Kg.
Sensors 21 00456 g026
Figure 27. Encoder position, output and speed plots for PID++ DOWN operation— V m a x 30 cnts/ms, A d e s i r e d 0.055 cnts/ms 2 —10 g.
Figure 27. Encoder position, output and speed plots for PID++ DOWN operation— V m a x 30 cnts/ms, A d e s i r e d 0.055 cnts/ms 2 —10 g.
Sensors 21 00456 g027
Figure 28. Encoder position, output and speed plots for PID++ DOWN operation— V m a x 30 cnts/ms, A d e s i r e d 0.055 cnts/ms 2 —1 Kg.
Figure 28. Encoder position, output and speed plots for PID++ DOWN operation— V m a x 30 cnts/ms, A d e s i r e d 0.055 cnts/ms 2 —1 Kg.
Sensors 21 00456 g028
Figure 29. Encoder position, output and speed plots for PID++ DOWN operation— V m a x 120 cnts/ms, A d e s i r e d 0.040 cnts/ms 2 —10 g.
Figure 29. Encoder position, output and speed plots for PID++ DOWN operation— V m a x 120 cnts/ms, A d e s i r e d 0.040 cnts/ms 2 —10 g.
Sensors 21 00456 g029
Figure 30. Encoder position, output and speed plots for PID++ DOWN operation— V m a x 120 cnts/ms, A d e s i r e d 0.040 cnts/ms 2 —1 Kg.
Figure 30. Encoder position, output and speed plots for PID++ DOWN operation— V m a x 120 cnts/ms, A d e s i r e d 0.040 cnts/ms 2 —1 Kg.
Sensors 21 00456 g030
Figure 31. Encoder position, output and speed plots for PID++ DOWN operation— V m a x 120 cnts/ms, A d e s i r e d 0.055 cnts/ms 2 —10 g.
Figure 31. Encoder position, output and speed plots for PID++ DOWN operation— V m a x 120 cnts/ms, A d e s i r e d 0.055 cnts/ms 2 —10 g.
Sensors 21 00456 g031
Figure 32. Encoder position, output and speed plots for PID++ DOWN operation— V m a x 120 cnts/ms, A d e s i r e d 0.055 cnts/ms 2 —1 Kg.
Figure 32. Encoder position, output and speed plots for PID++ DOWN operation— V m a x 120 cnts/ms, A d e s i r e d 0.055 cnts/ms 2 —1 Kg.
Sensors 21 00456 g032
Figure 33. K p , K i and K d parameters for PID++ UP– V m a x 120 cnts/ms, A d e s i r e d 0.055 cnts/ms 2 —10 g.
Figure 33. K p , K i and K d parameters for PID++ UP– V m a x 120 cnts/ms, A d e s i r e d 0.055 cnts/ms 2 —10 g.
Sensors 21 00456 g033
Figure 34. K p , K i and K d parameters for PID++ UP– V m a x 120 cnts/ms, A d e s i r e d 0.055 cnts/ms 2 —1 Kg.
Figure 34. K p , K i and K d parameters for PID++ UP– V m a x 120 cnts/ms, A d e s i r e d 0.055 cnts/ms 2 —1 Kg.
Sensors 21 00456 g034
Figure 35. Encoder position, output and speed plots for basic PID UP operation—10 g.
Figure 35. Encoder position, output and speed plots for basic PID UP operation—10 g.
Sensors 21 00456 g035
Figure 36. Encoder position, output and speed plots for basic PID UP Operation—1 Kg.
Figure 36. Encoder position, output and speed plots for basic PID UP Operation—1 Kg.
Sensors 21 00456 g036
Figure 37. Encoder position, output and speed plots for basic PID DOWN operation—10 g.
Figure 37. Encoder position, output and speed plots for basic PID DOWN operation—10 g.
Sensors 21 00456 g037
Figure 38. Encoder position, output and speed plots for basic PID DOWN operation—1 Kg.
Figure 38. Encoder position, output and speed plots for basic PID DOWN operation—1 Kg.
Sensors 21 00456 g038
Publisher’s Note: MDPI stays neutral with regard to jurisdictional claims in published maps and institutional affiliations.

Share and Cite

MDPI and ACS Style

Arciuolo, T.F.; Faezipour, M. PID++: A Computationally Lightweight Humanoid Motion Control Algorithm. Sensors 2021, 21, 456. https://doi.org/10.3390/s21020456

AMA Style

Arciuolo TF, Faezipour M. PID++: A Computationally Lightweight Humanoid Motion Control Algorithm. Sensors. 2021; 21(2):456. https://doi.org/10.3390/s21020456

Chicago/Turabian Style

Arciuolo, Thomas F., and Miad Faezipour. 2021. "PID++: A Computationally Lightweight Humanoid Motion Control Algorithm" Sensors 21, no. 2: 456. https://doi.org/10.3390/s21020456

Note that from the first issue of 2016, this journal uses article numbers instead of page numbers. See further details here.

Article Metrics

Back to TopTop