User Tools

Site Tools


pid_vs_lqr_ballandbeam

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
pid_vs_lqr_ballandbeam [2016/02/06 00:16] joaomatospid_vs_lqr_ballandbeam [2016/07/13 14:59] (current) joaomatos
Line 1: Line 1:
-** __PID CONTROL__ **+===== Lego Ball and Beam ===== 
 +**Keywords:**Lego,NXT,Ball and Beam,PID,LQR.
  
- We can analyze the whole system into two distinct transfer functions , one for the ball and beam , and one for the motor. After , we can analyze the whole system putting these two transfer functions together in a block diagram. 
  
- ** __Ball and Beam Transfer Function Derivation__** +----
-{{ ::ball_system.jpg?direct&400 |}}+
  
- Analyzing the equilibrium we have:+===== Motivation and Audience =====
  
- {{::ball_derivation_1.jpg?direct&500|}}+Motivation and AudienceThis tutorial's motivation is to study about the mechanisms behind the control of a classical ball and beam problem,using Lego to build the structure and the NXT Brick to program the balance code using NXC(Not Exactly C) language and the Matlab environmentReaders of this tutorial assumes the reader has the following background and interests:
  
- {{:ball_derivation_2.jpg?direct&500|}} 
  
- {{:ball_derivation_3.jpg?direct&600|}} +.Automatic Controls Theory (PID and LQR)
- +
- +
-** __Motor Transfer Function Derivation__ ** +
- +
- One easy way to get the motor's transfer function is to plot and analyze its response to an input , and by a graphical analysis get the parameters to derive its transfer function. We can program an algorithm to read and save using file saving functions ) the motor position during its operation. The following code was used to save and after plot the motor response until it get to the desired angle.The code makes the motor runs from 0 to 130 degrees, controlled by PID using the function " PosRegEnable " . +
- +
-{{::motor_code_save.jpg?direct|}} +
- +
- Plotting the results we have: +
- +
- {{::motor_angle_vs_time.jpg?direct|}} +
- +
- By the graphic response , we can assume the motor system as a second order system (because of the oscillatory and overshoot response). As known , a second order is characterized by two parameters , natural frequency (σ) and damping ratio (ξ).We can get these parameters by the following steps:+
    
- {{:motor_formulas_1.jpg?direct|}}+.Controls Programming using lego NXT Brick (NXC language).
  
- {{::motor_formulas_2.jpg?direct|}} +.Controls Programming using Matlab.
-   +
- {{:motor_formulas_3.jpg?direct|}} +
-   +
- We know that a second order transfer function is: +
  
- {{:motor_formulas_4.jpg?direct|}} 
  
- So the motor's transfer function is: +----
-   +
- {{:motor_formulas_5.jpg?direct|}}+
  
-** __Motor system modeling on Simulink__ **+===== Parts List and Source =====
  
- We can simulate the motor system on Simulink and compare the result to the experimental result , to verify if the derivation is correct.+[[ballandbeam_parts|Parts List]]
  
- {{::motor_response.jpg?direct|}} 
  
- Comparing both responses we can see that the derivation was correct. 
  
- {{::comparison_motor.jpg?direct|}}+----
  
-** __SIMULATING THE WHOLE SYSTEM WITH PID CONTROL__ **+===== Construction Instructions =====
  
- We can simulate the whole system using the ball and beam together with the motor's transfer functions to simulate the real system. We can apply the PID control as well using Simulink. The block diagram and some results are shown bellow.+{{::new_instructions_ball_and_beam.rar| Step by Step Building}}
  
- {{::ball_and_beam_system.jpg?direct|}} 
  
- Simulation a disturbance on the system ( ball goes to 30 mm ) , we can see how the system will react in order to make the final ball position 0 mm.+----
  
- **Using only proportional control ( system is unstable ).**+===== System Modeling =====
  
- {{::proportional_only.jpg?direct|}}+[[ballandbeam_modelling|System Modeling.]]
  
- **Using PD control (with non tuned gains (Kp=2,Kd=1). System disturbance rejection time: 4,6 seconds** 
  
- {{::pd_control.jpg?direct|}}+----
  
- ** Working Video / Simulating Disturbance ** +===== Programming =====
  
- {{youtube>c2Q4lI70duc?medium}}+. [[ballandbeam_code|Programming]]
  
- On the video ,was simulated first a heavy disturbance , and then two small disturbances.  
  
- ** Comparison Simulink vs Real System **+----
  
- Introducing the a file saving function , the ball position over the time can be saved to a file and then plotted using an excel spreadsheet. Using KP= 1 and KI=0 and KD=0.76 and the disturbance shifting the ball to 176mm away from the setpoint.  
  
- {{::simulink_and_real.jpg?direct|}} 
  
-** NXT CODE ** 
  
- {{:code1.jpg?direct|}} 
- {{::code2.jpg?direct|}} 
- {{::code_3.jpg?direct|}} 
- {{::code5.jpg?direct|}} 
- {{::code_6.jpg?direct|}} 
  
-** TUNING THE CODE ** 
- 
- After introducing the file saving function and the necessary commands to get the data , the system response was slowed down. ( oscillating more than before ). So i made some tuning:  
-  * KP=1 and KD=0.60 
-  * No waiting time inside the if statements 
-  * 50ms waiting before starting the control loop again. 
- 
- The new result is: 
- 
- {{::the_last_response.jpg?direct|}} 
- 
- {{youtube>Jp9xxLjVyi0?medium}} 
- 
-  
-  
pid_vs_lqr_ballandbeam.1454746576.txt.gz · Last modified: by joaomatos