BeeLab: Matlab
Showing posts with label Matlab. Show all posts
Showing posts with label Matlab. Show all posts

Saturday, October 21, 2017

[Matlab] Robust Tuning of Mass-Spring-Damper System

7:20:00 AM
[Matlab] Robust Tuning of Mass-Spring-Damper System
This example shows how to robustly tune a PID controller for an uncertain mass-spring-damper system modeled in Simulink.

Simulink Model of Mass-Spring-Damper System

The mass-spring-damper depicted in Figure 1 is modeled by the second-order differential equation
where  is the force applied to the mass and  is the horizontal position of the mass.
Figure 1: Mass-Spring-Damper System.
This system is modeled in Simulink as follows:
open_system('rct_mass_spring_damper')
We can use a PID controller to generate the effort  needed to change the position . Tuning this PID controller is easy when the physical parameters  are known exactly. However this is rarely the case in practice, due to a number of factors including imprecise measurements, manufacturing tolerances, changes in operating conditions, and wear and tear. This example shows how to take such uncertainty into account during tuning to maintain high performance within the range of expected values for .

Uncertainty Modeling

The Simulink model uses the "most probable" or "nominal" values of :
Use the "uncertain real" (ureal) object to model the range of values that each parameter may take. Here the uncertainty is specified as a percentage deviation from the nominal value.
um = ureal('m',3,'Percentage',40);
uc = ureal('c',1,'Percentage',20);
uk = ureal('k',2,'Percentage',30);

Nominal Tuning

First tune the PID controller for the nominal parameter values. Here we use two simple design requirements:
  • Position  should track a step change with a 1 second response time
  • Filter coefficient  in PID controller should not exceed 100.
These requirements are expressed as tuning goals:
Req1 = TuningGoal.Tracking('r','x',1);
Req2 = TuningGoal.ControllerPoles('Controller',0,0,100);
Create an slTuner interface for tuning the "Controller" block in the Simulink model, and use systune to tune the PID gains and best meet the two requirements.
ST0 = slTuner('rct_mass_spring_damper','Controller');
ST = systune(ST0,[Req1 Req2]);
Final: Soft = 1.02, Hard = -Inf, Iterations = 44
Use getIOTransfer to view the closed-loop step response.
Tnom = getIOTransfer(ST,'r','x');
step(Tnom)
The nominal response meets the response time requirement and looks good. But how robust is it to variations of ?

Robustness Analysis

To answer this question, use the "block substitution" feature of slTuner to create an uncertain closed-loop model of the mass-spring-damper system. Block substitution lets you specify the linearization of a particular block in a Simulink model. Here we use this to replace the crisp values of  by the uncertain values um,uc,uk defined above.
blocksubs(1).Name = 'rct_mass_spring_damper/Mass';
blocksubs(1).Value = 1/um;
blocksubs(2).Name = 'rct_mass_spring_damper/Damping';
blocksubs(2).Value = uc;
blocksubs(3).Name = 'rct_mass_spring_damper/Spring Stiffness';
blocksubs(3).Value = uk;
UST0 = slTuner('rct_mass_spring_damper','Controller',blocksubs);
To assess the robustness of the nominal tuning, apply the tuned PID gains to the (untuned) uncertain model UST0 and simulate the "uncertain" closed-loop response.
% Apply result of nominal tuning (ST) to uncertain closed-loop model UST0
setBlockValue(UST0,getBlockValue(ST));
Tnom = getIOTransfer(UST0,'r','x');
rng(0), step(Tnom,25), grid
The step plot shows the closed-loop response with the nominally tuned PID for 20 randomly selected values of  in the specified uncertainty range. Observe the significant performance degradation for some parameter combinations, with poorly damped oscillations and a long settling time.

Robust Tuning

To improve the robustness of the PID controller, re-tune it using the uncertain closed-loop model UST0 rather than the nominal closed-loop model ST0. Due to the presence of ureal components in the model, systune automatically tries to maximize performance over the entireuncertainty range. This amounts to minimizing the worst-case value of the "soft" tuning goals Req1 and Req2.
UST0 = slTuner('rct_mass_spring_damper','Controller',blocksubs);
UST = systune(UST0,[Req1 Req2]);
Soft: [1.02,2.92], Hard: [-Inf,-Inf], Iterations = 44
Soft: [1.03,1.43], Hard: [-Inf,-Inf], Iterations = 24
Final: Soft = 1.04, Hard = -Inf, Iterations = 91
Soft: [1.04,1.04], Hard: [-Inf,-Inf], Iterations = 23
The robust performance is only slightly worse than the nominal performance, but the same uncertain closed-loop simulation shows a significant improvement over the nominal design.
Trob = getIOTransfer(UST,'r','x');
rng(0), step(Tnom,Trob,25), grid
legend('Nominal tuning','Robust tuning')
This is confirmed by plotting the worst-case gain from  to  as a function of frequency. Note the attenuated resonance near 1 rad/s.
clf
subplot(121), wcsigma(Tnom,{1e-2,1e2}), grid
set(gca,'YLim',[-20 10]), title('Nominal tuning')
subplot(122), wcsigma(Trob,{1e-2,1e2}), grid
set(gca,'YLim',[-20 10]), title('Robust tuning'), legend('off')
A comparison of the two PID controllers shows similar behaviors except for one key difference. The nominally tuned PID excessively relies on "cancelling" (notching out) the plant resonance, which is not a robust strategy in the presence of uncertainty on the resonance frequency.
Cnom = getBlockValue(ST,'Controller');
Crob = getBlockValue(UST,'Controller');
clf, bode(Cnom,Crob), grid
legend('Nominal tuning','Robust tuning')
For further insight, plot the performance index (maximum value of the "soft" tuning goals Req1,Req2) as a function of the uncertain parameters  for the nominal damping . Use the "varying parameter" feature of slTuner to create an array of closed-loop models over a grid of  values covering their uncertainty ranges.

Saturday, September 16, 2017

[Arduino] Hướng dẫn thêm packages vào Matlab

12:55:00 PM
[Arduino] Hướng dẫn thêm packages vào Matlab
Hiện tại Matlab đã hỗ trợ phần cứng khá là nhiều ( mặc dù vẫn thua xa Labview). Điểm sơ qua thì thấy nó đã hỗ trợ Arduino, STM32, robot MindStorm của Lego, FPGA của Xilinx hay máy tính nhúng,etc.
Việc kết nối phần cứng sẽ làm đơn giản hóa việc xây dựng, tính toán thuật toán , xây dựng hàm truyền rồi chạy trên phần cứng
Nếu làm theo truyền thống thì sẽ phải dùng matlab xây dựng hàm truyền, tính toán các hệ số rồi lại vào Arduino IDE code như truyền thống. Nhưng việc hỗ trợ này sẽ giúp chúng ta có thể viết thuật toán và code Arduino trên Matlab. Tất nhiên là cú pháp câu lệnh sẽ khác một chút xíu và Thư viện trên Matlab cũng sẽ ít hơn nhiều, nhưng sẽ cập nhật nhiều trong thời gian gần.

Matlab hỗ trợ 2 kiểu code cho arduino:

1. Code trên Command window (rất quen thuộc với anh em)
2. Code theo Graphics Language trên Simulink (sắp quen thuộc với anh em )

I. Hướng dẫn cài đặt Arduino cho Matlab
  1. Cài đặt Arduino IDE như bình thường ( download từ trang chủ arduino.cc)
  2. Cài đặt Hardware Support từ Matlab
Đăng nhập tài khoảng Matlab của bạn (nếu đã có), nếu chưa có thì tạo acc và install bình thường

II. Sử dụng Help để xem ví dụ

III. Viết một chương trình đơn giản
Sau khi cắm arduino vào máy tính, xác định loại board, port thì viết như sau (tham khảo help phía trên)
IV. Arduino trong Simulink (Tiếp theo)

Sunday, September 3, 2017

[Matlab] Giới thiệu về Matlab

9:23:00 AM
[Matlab] Giới thiệu về Matlab
What is Matlab? | How It Works | Skill & Career Growth | Advantages

Giới thiệu về MATLAB

MATLAB là một môi trường tính toán số và lập trình, được thiết kế bởi công ty MathWorks. MATLAB cho phép tính toán số với ma trận, vẽ đồ thị hàm số hay biểu đồ thông tin, thực hiện thuật toán, tạo các giao diện người dùng và liên kết với những chương trình máy tính viết trên nhiều ngôn ngữ lập trình khác. MATLAB giúp đơn giản hóa việc giải quyết các bài toán tính toán kĩ thuật so với các ngôn ngữ lập trình truyền thống như C, C++, và Fortran.

MATLAB được sử dụng trong nhiều lĩnh vực, bao gồm xử lý tín hiệu và ảnh, truyền thông, thiết kế điều khiển tự động, đo lường kiểm tra, phân tích mô hình tài chính, hay tính toán sinh học. Với hàng triệu kĩ sư và nhà khoa học làm việc trong môi trường công nghiệp cũng như ở môi trường hàn lâm, MATLAB là ngôn ngữ của tính toán khoa học. 

Cách tìm một bản MATLAB để sử dụng

Mỗi năm Mathworks - công ty sản xuất và phân phối MATLAB đưa ra thị trường 2 bản cập nhật rxxxxa vào đầu năm và rxxxb vào cuối năm (với xxxx là năm phát hành). Với các bạn bắt đầu tìm hiểu và sử dụng Matlab, nên sử dụng bản r2008a vì dung lượng không quá lớn, chạy nhanh với các máy tính có tài nguyên phần cứng không cao.

Với các bạn sinh viên muốn sử dụng MATLAB, bạn cần có phần mềm MATLAB, thông thường là qua 1 trong các cách sau:

  • Tìm trên mạng internet hoặc mua ở các cửa hàng đĩa, dung lượng của bộ cài MATLAB có đầy đủ các Toolbox. Đây là cách nhanh nhất và thông dụng nhất do giá của MATLAB là rất cao.
  • Xin bản trial trên trang chủ của Mathworks, bạn cần hoàn thành form đăng kí.
  • Sử dụng MATLAB có bản quyền ở trường Đại học bạn học.

Sử dụng MATLAB thế nào cho hiệu quả ?

  • Muốn thành thạo sử dụng MATLAB bạn cần phải tự mình gõ các câu lệnh và xem kết quả câu lệnh, mắc lỗi và tìm cách sửa lỗi. Cách học "trial and error" này theo tôi là cách tốt nhất để học lập trình. Thời gian và công sức bạn bỏ ra bao nhiêu sẽ mang lại cho bạn nhiều kiến thức bấy nhiêu.
  • Nếu bạn đã có nền tảng là một ngôn ngữ lập trình như C, C++ hay Pascal, ... việc làm quen với MATLAB sẽ rất dễ dàng, chỉ cần một ngày là bạn có thể biết cách sử dụng được MATLAB. Tuy nhiên sử dụng được không có nghĩa là thành thạo hay xuất sắc, lập trình MATLAB có tư duy riêng, không giống hệt với tư duy lập trình của ngôn ngữ nào cả và với từng người dùng, tùy theo mục đích sử dụng MATLAB mà tư duy lập trình cũng khác nhau.
  • Khả năng ứng dụng to lớn của MATLAB là nhờ các Toolbox được viết bởi những chuyên gia hàng đầu trong nhiều lĩnh vực. Không ai học tất cả các Toolbox của MATLAB cả. Để tiết kiệm thời gian và công sức không cần thiết, mỗi người dùng MATLAB chỉ cần tìm hiểu một hay một vài Toolbox liên quan đến công việc của mình là đủ.
  • Tài liệu về MATLAB hiện nay đã có rất nhiều, cả tiếng Việt và tiếng Anh. Để sử dụng MATLAB, không nhất thiết phải đọc nhiều sách. Bạn hãy chọn một cuốn bất kì liên quan đến lĩnh vực ứng dụng của MATLAB mà bạn quan tâm để đọc, làm theo các ví dụ và suy nghĩ. Tài liệu quan trọng nhất chính là Help của MATLAB, nếu như bạn có khả năng tự học tốt, Help là tài liệu duy nhất bạn cần và nó đã có sẵn khi cài MATLAB.
  • Để giúp các bạn dễ dàng hơn trong việc sử dụng MATLAB, chúng tôi cung cấp các bài học cơ bản, được dịch từ tài liệu "Introduction to Programming in MATLAB" từ MIT OpenCoursewares gồm 5 bài (Những bạn có khả năng ngoại ngữ nên tìm hiểu trực tiếp bản gốc từ trang web của MIT Opencoursewares) còn các phần hướng dẫn sử dụng các Toolbox được tự thực hiện, hoặc sưu tầm và dịch từ các sách cũng như từ Help của MATLAB. Nếu như có những sai sót, rất mong được sự góp ý từ các bạn.
  • Xét cho cùng MATLAB chỉ là công cụ để thực hiện ý tưởng, MATLAB có thể cho ta kết quả nhưng nó không thay ta suy nghĩ, không mang cho ta kiến thức. Nắm chắc kiến thức chuyên môn là chìa khóa để sử dụng MATLAB có hiệu quả. Ví dụ muốn thiết kế bộ điều khiển PID, bạn cần hiểu các thành phần P, I, D có tác dụng như thế nào tới chất lượng hệ thống trước khi dùng câu lệnh của MATLAB để chỉnh định tham số tự động.

Bắt đầu học sử dụng MATLAB

Nếu bạn đã sẵn sàng để học sử dụng MATLAB, hãy bắt đầu ngay với Website chính thức của MATLAB:

Các website hướng dẫn dùng Matlab của một số trường ĐH trên thế giới:
Một số tài liệu tham khảo link1 này và link 2 này.

Vì Matlab ứng dụng trong hầu hết các lĩnh vực nghiên cứu nên các bạn muốn tôi sẽ viết một số bài hướng dẫn cụ thể nào thì hãy comment bên dưới nhé!