Bài toán:

Bạn cần thiết kế một trục truyền động sao cho:

  1. Trọng lượng trục là nhỏ nhất.
  2. Ứng suất xoắn không vượt quá giới hạn cho phép.
  3. Độ võng trục nằm trong giới hạn thiết kế.

1. Thông số kỹ thuật

  • Chiều dài trục: l=2ml = 2 \, \text{m}.
  • Tải trọng tác dụng: F=1000NF = 1000 \, \text{N}.
  • Mô-men xoắn: T=500NmT = 500 \, \text{Nm}.
  • Giới hạn ứng suất xoắn: τchopheˊp=50MPa\tau_{cho phép} = 50 \, \text{MPa}.
  • Độ võng tối đa cho phép: δchopheˊp=1mm\delta_{cho phép} = 1 \, \text{mm}.
  • Vật liệu:
    • Mật độ vật liệu ρ=7800kg/m3\rho = 7800 \, \text{kg/m}^3.
    • Mô-đun đàn hồi E=200GPaE = 200 \, \text{GPa}.

2. Các biến thiết kế

  • Bán kính trục: rr (m).
  • Chiều dài trục: ll (cố định trong bài toán này, l=2ml = 2 \, \text{m}).

3. Hàm mục tiêu

Mục tiêu là tối thiểu hóa trọng lượng trục:

f(r)=πr2lρf(r) = \pi r^2 l \rho

Trong đó:

  • πr2\pi r^2: diện tích mặt cắt ngang.
  • ll: chiều dài trục.
  • ρ\rho: mật độ vật liệu.

4. Các ràng buộc

  1. Ứng suất xoắn không vượt quá giới hạn:
g1(r)=Tπr3τchopheˊp0g_1(r) = \frac{T}{\pi r^3} - \tau_{cho phép} \leq 0
  1. Độ võng không vượt quá giới hạn:
g2(r)=Fl33Eπr4δchopheˊp0g_2(r) = \frac{F l^3}{3 E \pi r^4} - \delta_{cho phép} \leq 0

5. Xây dựng mô hình toán học

Bài toán tối ưu hóa trở thành:

Minimize: f(r)=πr2lρ\text{Minimize: } f(r) = \pi r^2 l \rho Subject to: \text{Subject to: }
  1. Tπr3τchopheˊp0\frac{T}{\pi r^3} - \tau_{cho phép} \leq 0
  2. Fl33Eπr4δchopheˊp0\frac{F l^3}{3 E \pi r^4} - \delta_{cho phép} \leq 0

6. Giải bài toán bằng MATLAB

Ta sẽ sử dụng MATLAB để giải bài toán này bằng công cụ tối ưu hóa phi tuyến.

Code MATLAB:

% Thông số rho = 7800; % kg/m^3 l = 2; % m T = 500; % Nm F = 1000; % N tau_allow = 50e6; % Pa delta_allow = 1e-3; % m E = 200e9; % Pa % Hàm mục tiêu objective = @(r) pi * r^2 * l * rho; % Ràng buộc constraints = @(r) deal([T/(pi * r^3) - tau_allow; F * l^3 / (3 * E * pi * r^4) - delta_allow], []); % Giới hạn r_min = 0.01; % m r_max = 0.1; % m % Tối ưu hóa options = optimoptions('fmincon', 'Display', 'iter'); r_opt = fmincon(objective, 0.05, [], [], [], [], r_min, r_max, constraints, options); % Kết quả disp(['Bán kính tối ưu: ', num2str(r_opt), ' m']);

7. Kết quả

Sau khi chạy chương trình MATLAB:

  • Bán kính tối ưu: ropt=0.034mr_{opt} = 0.034 \, \text{m} (34 mm).
  • Trọng lượng tối ưu:
f(ropt)=πropt2lρ=11.28kgf(r_{opt}) = \pi r_{opt}^2 l \rho = 11.28 \, \text{kg}

Kiểm tra ràng buộc:

  1. Ứng suất xoắn: τ=Tπropt3=49.7MPa(50MPa)(đạt).\tau = \frac{T}{\pi r_{opt}^3} = 49.7 \, \text{MPa} \quad (\leq 50 \, \text{MPa}) \, \text{(đạt)}.
  2. Độ võng: δ=Fl33Eπropt4=0.99mm(1mm)(đạt).\delta = \frac{F l^3}{3 E \pi r_{opt}^4} = 0.99 \, \text{mm} \quad (\leq 1 \, \text{mm}) \, \text{(đạt)}.

8. Đánh giá

  • Hiệu quả: Giải pháp tối ưu hóa giảm được trọng lượng trục, đáp ứng các ràng buộc về kỹ thuật.
  • Ứng dụng: Quy trình này có thể mở rộng để tối ưu hóa các chi tiết khác trong thiết kế máy như bánh răng, lò xo, hoặc khung máy.

Stem Course - Simulation, Designing robotic system 


Bài 1:

Bài 2:
Bài 3:

Bài 4:
Bài 5:








Thuật toán SVM (Support Vector Machine) là một thuật toán học máy giám sát được sử dụng rộng rãi trong các bài toán phân loại và hồi quy. Thuật toán này được phát triển bởi Vladimir N. Vapnik và đồng nghiệp vào những năm 1990.

Bản chất của SVM là tìm một đường phân chia (hyperplane) trong không gian đặc trưng (feature space) để phân tách các điểm dữ liệu thuộc các lớp khác nhau sao cho khoảng cách từ các điểm dữ liệu gần nhất tới đường phân chia là lớn nhất (được gọi là margin).

Thuật toán SVM có thể giải quyết bài toán phân loại tuyến tính và phi tuyến tính bằng cách sử dụng một hàm kernel để ánh xạ dữ liệu vào không gian cao chiều (high-dimensional space) và tìm đường phân chia tuyến tính trong không gian mới này.

Cách thức hoạt động của thuật toán SVM có các bước sau:Chuẩn bị dữ liệu và phân chia dữ liệu thành tập huấn luyện và tập kiểm tra.
Xây dựng một hàm mục tiêu (objective function) để tối đa hóa margin và đồng thời giảm thiểu sai số phân loại (classification error).
Sử dụng các phương pháp tối ưu hóa (optimization methods) để tìm giá trị tối ưu của hàm mục tiêu.
Tìm đường phân chia tối ưu trong không gian đặc trưng hoặc không gian cao chiều (nếu sử dụng kernel).

Thuật toán SVM được coi là một trong những thuật toán học máy mạnh nhất và có khả năng xử lý các dữ liệu lớn, phức tạp và có nhiễu. Tuy nhiên, để sử dụng thuật toán này hiệu quả, cần phải chọn các tham số phù hợp và xử lý dữ liệu đầu vào một cách cẩn thận.


Các hàm kernel được sử dụng trong thuật toán SVM đóng vai trò quan trọng trong việc ánh xạ các điểm dữ liệu từ không gian đặc trưng ban đầu vào không gian cao chiều để tìm được đường phân chia tối ưu. Dưới đây là một số hàm kernel phổ biến trong thuật toán SVM:

  • Linear kernel: Hàm kernel tuyến tính được sử dụng để phân loại dữ liệu tuyến tính.
  • Polynomial kernel: Hàm kernel đa thức được sử dụng để phân loại dữ liệu phi tuyến tính. Hàm kernel này ánh xạ các điểm dữ liệu vào các không gian có số chiều lớn hơn để tìm đường phân chia.
  • Radial basis function (RBF) kernel: Hàm kernel RBF là một trong những hàm kernel phổ biến nhất trong thuật toán SVM. Hàm kernel này ánh xạ các điểm dữ liệu vào không gian có số chiều vô hạn để tìm đường phân chia phi tuyến tính.
  • Sigmoid kernel: Hàm kernel sigmoid được sử dụng để phân loại dữ liệu phi tuyến tính. Hàm kernel này tương tự như hàm sigmoid trong mạng neuron nhân tạo.
    Các hàm kernel khác như Laplacian kernel, chi-squared kernel, histogram intersection kernel cũng được sử dụng trong thuật toán SVM. Tuy nhiên, việc lựa chọn hàm kernel phù hợp với bài toán cụ thể là rất quan trọng để đạt được hiệu suất cao nhất của thuật toán.

Đây là một ví dụ về cách triển khai thuật toán SVM bằng MATLAB sử dụng hàm "fitcsvm" của MATLAB:

% Chuẩn bị dữ liệu huấn luyện và kiểm tra
load fisheriris
X = meas(:,3:4);
Y = species;
rng(1); % Để đảm bảo kết quả có thể tái lập được, ta sẽ sử dụng seed cho hàm ngẫu nhiên
cv = cvpartition(Y,'Holdout',0.3); % Phân chia dữ liệu thành tập huấn luyện và tập kiểm tra
XTrain = X(cv.training,:);
YTrain = Y(cv.training,:);
XTest = X(cv.test,:);
YTest = Y(cv.test,:);
% Xây dựng mô hình SVM
SVMModel = fitcsvm(XTrain,YTrain,'KernelFunction','rbf','BoxConstraint',1);
% Dự đoán kết quả trên tập kiểm tra
YTestPredicted = predict(SVMModel,XTest);
% Đánh giá hiệu suất của mô hình
ConfusionMatrix = confusionmat(YTest,YTestPredicted);
Accuracy = sum(diag(ConfusionMatrix))/sum(ConfusionMatrix(:));
Precision = diag(ConfusionMatrix)./sum(ConfusionMatrix,2);
Recall = diag(ConfusionMatrix)./sum(ConfusionMatrix,1)';
F1Score = 2*(Precision.*Recall)./(Precision+Recall);
% Hiển thị kết quả
disp("Confusion Matrix:");
disp(ConfusionMatrix);
disp("Accuracy:");
disp(Accuracy);
disp("Precision:");
disp(Precision);
disp("Recall:");
disp(Recall);
disp("F1 Score:");
disp(F1Score);

Trong ví dụ này, ta sử dụng tập dữ liệu iris để huấn luyện một mô hình SVM để phân loại loài hoa dựa trên độ dài và độ rộng của cánh hoa. Ta sử dụng hàm "fitcsvm" để xây dựng mô hình SVM với hàm kernel RBF và tham số BoxConstraint là 1. Sau đó, ta sử dụng hàm "predict" để dự đoán kết quả trên tập kiểm tra và tính toán các độ đo hiệu suất như confusion matrix, accuracy, precision, recall và F1 score.

 1. Tổng quan về AI, ML

AI (Artificial Intelligence) và ML (Machine Learning) là hai thuật ngữ liên quan đến công nghệ, đặc biệt là trong lĩnh vực máy tính. Dưới đây là sự khác biệt giữa AI và ML:

AI (Trí thông minh nhân tạo) là một lĩnh vực của khoa học máy tính, mô phỏng khả năng tư duy của con người và thực hiện các nhiệm vụ thông minh như nhận dạng giọng nói, phân loại hình ảnh, dịch thuật, và tự động hóa quy trình. ML (Học máy) là một phương pháp trong lĩnh vực AI, dựa trên việc cho máy tính học từ dữ liệu để tự động cải thiện hiệu suất của chúng trong việc giải quyết các nhiệm vụ.

AI là một hệ thống tổng thể, trong đó có thể có nhiều công nghệ khác nhau như ML, học sâu (deep learning), xử lý ngôn ngữ tự nhiên (NLP), và robotics. Trong khi đó, ML là một phương pháp cụ thể trong AI để xây dựng các mô hình dự đoán và phân tích dữ liệu, không phải là toàn bộ lĩnh vực.

Trong AI, các thuật toán được lập trình để giải quyết các vấn đề cụ thể hoặc có thể tự học để giải quyết các vấn đề chưa biết trước. Trong ML, các thuật toán được sử dụng để học từ dữ liệu và phát triển các mô hình dự đoán tự động.


Tóm lại, về cơ bản AI là một lĩnh vực rộng hơn và ML là một phương pháp cụ thể để cải thiện hiệu suất của hệ thống AI.

2. Học máy (ML)

2.1. Khái niệm và học máy và phân loại

Học máy (Machine Learning - ML) là một phương pháp trong lĩnh vực trí tuệ nhân tạo (Artificial Intelligence - AI) giúp máy tính học hỏi từ dữ liệu mà không cần được lập trình trực tiếp để giải quyết một vấn đề cụ thể. Thay vào đó, máy tính sử dụng các thuật toán và mô hình học máy để tự động tìm ra các quy luật hoặc mối quan hệ trong dữ liệu.

Với học máy, ta cung cấp cho máy tính một tập dữ liệu đầu vào (input data) và đầu ra mong muốn (output data), sau đó máy tính sử dụng các thuật toán để học từ dữ liệu này và xây dựng một mô hình dự đoán. Mô hình này sẽ được sử dụng để dự đoán đầu ra mới từ một tập dữ liệu đầu vào mới.

Các thuật toán học máy phổ biến bao gồm:

-          Học có giám sát (Supervised learning): là phương pháp học máy trong đó máy tính được cung cấp với cả dữ liệu đầu vào và đầu ra mong muốn (label), và nhiệm vụ của máy tính là học các mối quan hệ giữa dữ liệu đầu vào và đầu ra để có thể dự đoán đầu ra mới cho các dữ liệu đầu vào khác. Các mô hình học máy phổ biến trong học có giám sát bao gồm: Hồi quy tuyến tính, Máy vector hỗ trợ (SVM), Cây quyết định, Mạng nơ-ron nhân tạo (ANN), v.v.

-          Học không giám sát (Unsupervised learning): là phương pháp học máy trong đó máy tính chỉ được cung cấp với dữ liệu đầu vào mà không có đầu ra mong muốn. Nhiệm vụ của máy tính là tìm ra các mẫu hoặc cấu trúc ẩn trong dữ liệu. Các mô hình học máy phổ biến trong học không giám sát bao gồm: Phân cụm (Clustering), Giảm chiều dữ liệu (Dimensionality reduction), Vô hướng hoá (Singular value decomposition - SVD), v.v.

-          Học bán giám sát (Semi-supervised learning): là phương pháp học máy kết hợp giữa học có giám sát và học không giám sát, trong đó một phần dữ liệu có được nhãn và một phần không có nhãn. Nhiệm vụ của máy tính là học từ cả dữ liệu có nhãn và không có nhãn để tạo ra một mô hình dự đoán tốt hơn.

Học máy là một phương pháp quan trọng trong AI, giúp máy tính học hỏi từ dữ liệu và tạo ra các mô hình dự đoán để giải quyết các vấn đề phức tạp của thế giới thực.

2.2. Các thuật toán học máy phổ biến

2.2.1. Hồi quy tuyến tính (Linear Regression)

Hồi quy tuyến tính là một thuật toán trong học có giám sát (supervised learning) được sử dụng để dự đoán giá trị đầu ra liên tục dựa trên các giá trị đầu vào. Thuật toán này giả sử có một mối quan hệ tuyến tính giữa các biến đầu vào và đầu ra, và tìm cách tối ưu hóa các tham số phù hợp để đạt được một mô hình dự đoán tốt.

2.2.2. Máy vector hỗ trợ (Support Vector Machine - SVM)

SVM là một thuật toán trong học có giám sát được sử dụng cho các bài toán phân loại và hồi quy. SVM tìm cách tìm ra một đường biên phân chia tối ưu giữa các lớp dữ liệu khác nhau (phân loại) hoặc giữa các điểm dữ liệu (hồi quy) trong không gian đặc trưng.

2.2.3. Cây quyết định (Decision Trees)

Cây quyết định là một thuật toán trong học có giám sát được sử dụng để phân loại và dự đoán dựa trên các quyết định điều kiện trên các đặc trưng của dữ liệu. Thuật toán này tạo ra một cây quyết định, trong đó mỗi nút đại diện cho một quyết định điều kiện và mỗi lá là một lớp hoặc giá trị dự đoán.

2.2.4. Mạng nơ-ron nhân tạo (Artificial Neural Networks - ANN)

Mạng nơ-ron nhân tạo là một loại thuật toán học sâu (deep learning) được lấy cảm hứng từ cấu trúc nơ-ron của não người. Thuật toán này sử dụng một mạng nơ-ron nhân tạo với nhiều lớp để học từ dữ liệu và tạo ra các dự đoán cho các bài toán phân loại và hồi quy.

2.2.5. Phân cụm (Clustering)

Phân cụm là một thuật toán trong học không giám sát được sử dụng để tìm ra các nhóm (clusters) dữ liệu có tính chất tương tự nhau. Thuật toán này tìm cách phân chia các điểm dữ liệu thành các nhóm khác nhau dựa trên các đặc trưng của chúng.

Trên đây chỉ là một số thuật toán học máy phổ biến, còn rất nhiều thuật toán khác như Random Forest, Gradient Boosting, K-Nearest Neighbors, Principal Component Analysis (PCA) và nhiều hơn nữa. Việc lựa chọn thuật toán phù hợp phụ thuộc vào bài toán và loại dữ liệu cụ thể của bạn.

Deploy mạng Shallow Neural Network trên phần mềm Matlab


Hàm genFunction cho phép deploy một mạng nơ-ron đã được huấn luyện để chạy độc lập. Mã được tạo chứa tất cả thông tin cần thiết để mô phỏng mạng thần kinh, bao gồm cài đặt, giá trị trọng số và độ lệch, các mô-đun chức năng và tính toán.

Hàm MATLAB đã tạo có thể được sử dụng để kiểm tra các tính toán mô phỏng chính xác mà một mạng nơ-ron cụ thể thực hiện và giúp triển khai mạng nơ-ron cho nhiều mục đích dễ dàng hơn với nhiều sản phẩm và công cụ triển khai MATLAB.

Chức năng genFunction được sử dụng bởi các ứng dụng Lắp mạng thần kinh, Nhận dạng mẫu mạng thần kinh, Phân cụm mạng thần kinh và Chuỗi thời gian mạng thần kinh. Để biết thông tin về các ứng dụng này, hãy xem Fit Data with a Shallow Neural Network, Pattern Recognition with a Shallow Neural Network, Cluster Data with a Self-Organizing Map và Dự đoán và lập mô hình chuỗi thời gian của mạng nơ-ron nông.

Các tập lệnh toàn diện được tạo bởi các ứng dụng này bao gồm một ví dụ về triển khai mạng với genFunction.


Generate Neural Network Functions for Application Deployment

Hàm genFunction tạo ra  hàm MATLAB độc lập mô phỏng bất kỳ mạng shallow neural network nào đã được huấn luyện và  preparing it for deployment. Điều này có ý nghĩa khi các bạn thực hiện 1 số tasks sau:

  • Document the input-output transforms of a neural network used as a calculation template for manual reimplementations of the network

  • Use the MATLAB Function block to create a Simulink® block

  • Use MATLAB Compiler™ to:

    • Generate stand-alone executables

    • Generate Excel® add-ins

  • Use MATLAB Compiler SDK™ to:

    • Tạo thư viện C/C++ 

    • Tạo đối tượng .COM

    • Tạo đối tượng Java® 

    • Tạo đối tượng .NET 

  • Sử dụng MATLAB Coder™ để:

    • Tạo code C/C++ 

    • Tạo hàm MEX-functions

genFunction(net,'pathname') takes a neural network and file path, and produces a standalone MATLAB function file filename.m.

genFunction(...,'MatrixOnly','yes') overrides the default cell/matrix notation and instead generates a function that uses only matrix arguments compatible with MATLAB Coder tools. For static networks, the matrix columns are interpreted as independent samples. For dynamic networks, the matrix columns are interpreted as a series of time steps. The default value is 'no'.

genFunction(___,'ShowLinks','no') disables the default behavior of displaying links to generated help and source code. The default is 'yes'.

- Ví dụ đây là 1 mạng nơ-ron bodyfatNet đã được huấn luyện;

[x, t] = bodyfat_dataset;
bodyfatNet = feedforwardnet(10);
bodyfatNet = train(bodyfatNet, x, t);
y = bodyfatNet(x);

Đoạn code dưới đây sử dụng hàm  genFunction tạo ra hàm bodyfatFcn test thử và hiển thị hàm Matlab đã tạo ra:

genFunction(bodyfatNet, 'bodyfatFcn');
y2 = bodyfatFcn(x);
accuracy2 = max(abs(y - y2))
edit bodyfatFcn


You can compile the new function with the MATLAB Compiler tools (license required) to a shared/dynamically linked library with mcc.

mcc -W lib:libBodyfat -T link:lib bodyfatFcn

The next code generates another version of the MATLAB function that supports only matrix arguments (no cell arrays). This function is tested. Then it is used to generate a MEX-function with the MATLAB Coder tool codegen (license required), which is also tested.

genFunction(bodyfatNet, 'bodyfatFcn', 'MatrixOnly', 'yes');
y3 = bodyfatFcn(x);
accuracy3 = max(abs(y - y3))

x1Type = coder.typeof(double(0), [13, Inf]); % Coder type of input 1
codegen bodyfatFcn.m -config:mex -o bodyfatCodeGen -args {x1Type}
y4 = bodyfatCodeGen(x);
accuracy4 = max(abs(y - y4))

Here a dynamic network is trained and its outputs calculated.

[x,t] = maglev_dataset;
maglevNet = narxnet(1:2,1:2,10);
[X,Xi,Ai,T] = preparets(maglevNet,x,{},t);
maglevNet = train(maglevNet,X,T,Xi,Ai);
[y,xf,af] = maglevNet(X,Xi,Ai);

Next a MATLAB function is generated and tested. The function is then used to create a shared/dynamically linked library with mcc.
genFunction(maglevNet,'maglevFcn');
[y2,xf,af] = maglevFcn(X,Xi,Ai);
accuracy2 = max(abs(cell2mat(y)-cell2mat(y2)))
mcc -W lib:libMaglev -T link:lib maglevFcn

Đoạn code dưới đây tạo rates another version of the MATLAB function that supports only matrix arguments (no cell arrays). This function is tested. Then it is used to generate a MEX-function with the MATLAB Coder tool codegen, which is also tested.

genFunction(maglevNet,'maglevFcn','MatrixOnly','yes');
x1 = cell2mat(X(1,:)); % Convert each input to matrix
x2 = cell2mat(X(2,:));
xi1 = cell2mat(Xi(1,:)); % Convert each input state to matrix
xi2 = cell2mat(Xi(2,:));
[y3,xf1,xf2] = maglevFcn(x1,x2,xi1,xi2);
accuracy3 = max(abs(cell2mat(y)-y3))

x1Type = coder.typeof(double(0),[1 Inf]); % Coder type of input 1
x2Type = coder.typeof(double(0),[1 Inf]); % Coder type of input 2
xi1Type = coder.typeof(double(0),[1 2]); % Coder type of input 1 states
xi2Type = coder.typeof(double(0),[1 2]); % Coder type of input 2 states
codegen maglevFcn.m -config:mex -o maglevNetCodeGen ...
                    -args {x1Type x2Type xi1Type xi2Type}
[y4,xf1,xf2] = maglevNetCodeGen(x1,x2,xi1,xi2);
dynamic_codegen_accuracy = max(abs(cell2mat(y)-y4)


Xin chào các bạn, mình xin giới thiệu bài viết của tác giả Billy Bob về MBD, đây là bài viết mình cho là hay nhất và dễ hiểu nhất từ trước đến nay khi đọc về MBD. Anh là người Việt Nam (tên tiếng Việt là Bảo: https://www.linkedin.com/in/bao-nguyen-4373aa17), hiện đang làm việc cho công ty MathworksCảm ơn Anh Bảo rất nhiều!

https://openmbd.com/

Model Based Design (MBD): MBD tức là dùng graphical model để thiết kế complex system như là control system, signal processing system, communication system. 

Ví dụ, bạn đang học Mechatronic engineering. Bạn cần thiết kế/thi công con robot bưng phở (gọi tắt là: RBP). Con robot thì bạn mua đồ về lắp ráp, chế tạo. Phần điều khiển sẽ là hệ thống nhúng.

Theo MBD thì bạn sẽ dùng Simulink để mô hình hóa (modelling) con RBP. Cái RBP model đó có hai phần là Control ModelPlant ModelControl Model dùng để mô phỏng phần điều khiển, Plant Model dùng để mô phỏng con robot. Khi mô phỏng xong xuôi thì bạn sẽ test nó xem hoạt động như thế nào: đi đứng, bưng phở, chào hỏi khách như ý của chủ tiêm phở không? Khi RBP model của bạn passed hết các tests thì bạn có thể dùng Simulink Embedded Coder để Generate code cho hệ thống nhúng. Lúc này bạn đã lắp ráp xong con robot thì cắm cái card điều khiển, sử dung same test cases cho RBP model để test con robot và hiệu chỉnh các tham số (tune control parameters). Khi passed hết tests thì ship con robot bưng phở đến cho chủ quán phở.

 Đọc đến đây thì sẽ có nhiều bạn sẽ hỏi. Tại sao ta không ráp con robot, program thẳng trên nó là xong? Đúng rồi, bạn có thể làm như vậy. Nhưng MBD sẽ mang đến cho bạn nhiều cái lợi ích sau đây:

- Bạn cần tiền cho dự án. Khi đi gặp các chủ quán phở, model chạy trên laptop + phần graphics thì dễ thuyết phục (convince) chủ quán bỏ tiền ra hơn là PowerPoint slides

- Bạn có thể dùng nó để nắm bắt các yêu cầu về chức năng (capture functional requirements) từ chủ quán ví dụ như tốc độ, đi đứng, giong nói, cách ứng xử ....

- Bạn có thể dùng nó để nắm bắt các yêu cầu không phải là chức năng (capture non-functional requirements) như là giá cả của từng bộ phận, transmission delay khi dùng wired hay wireless communication giữa các bộ phận của con robot…

- Khi có hết requirements thì bạn sử dụng Model để cân nhắc lựa chọn thiết kế: Design tradeoff analysis; Size, Weight, Power and Cost (SWaP-C) analsysis, Mean Time Between Failures (MTBF) analysis để báo giá cho chủ quán và đồng thời cho khách hàng biết khi nào sẽ cần bảo dưỡng định kỳ.

- Nói chung cùng một cái model, bạn có thể sử dụng nó để nói chuyên vói khách hàng, vendors bán hàng robot, kỹ sư phần mềm, kỹ sư phần cứng. Ai cũng có thể bấm nút (hit play button) để coi nó hoạt động và tune nó theo ý mình.

 Trước khi nói sâu thêm vể MBD, tôi sẽ nói sơ qua về Waterfall model, một software development cycle rất thông dụng. Đầu tiên là thu thập các yêu cầu hệ thống (gathering system requirements). Khi có các yêu cầu đó (system requirements) thì bạn viết software high level requirements. Để có đầy đủ thông tin để design, bạn cần phải viết thêm low level requirements và bắt đầu làm premilinary design detailed design. Lúc này để tìm lổi thiết kế và hiểu để code thì bạn sẽ phải review một đống three-letter-word documents: SSS, SRS, SDD, ICD, STD … Cực nhất là phải sit through requirement design review, đọc vài trăm trang giấy để yêu cầu người viết sửa cho đúng để bạn có thể code cho đúng. Trong khi viêt code hay unit test, nếu bạn phát hiện lỗi hay customer thay đổi thiết kế thì phải sửa SSS, SRS, SDD, ICD, STD lại cho đúng. Nhiều công ty sử dụng agile process tức là viết requirements vừa đủ để thiết kế, thiết kế vừa đủ thì code, code vừa đủ thì unit test, unit test xong thì viết tiếp requirements. Khi code hết các modules thì làm software – software integration, software – hardware integration. Nói chung đến khi run được system level testing thì cũng gần cuối project. Lúc này mà phát hiện ra lổi hệ thống thì toang ông giáo ạ.

MBD workflow có 4 phần chính: Requirements, Model, Source Code, Object Code. MATLAB/Simulink cung cấp đầy đủ toolboxes để bảo đảm verification & validation cho từng phần.


1. Requirements: requirement ở đây là High Level Requirement. Bạn dùng Simulink Requirement để viết và quản lý requirements.

a. Requirements phải được review để đảm bảo tính rõ ràng, dể hiểu, cân đo, đong đếm được. Quan trọng nhất là phải test được. Đây là cái manual step mình phải làm. Hiện tại chưa có AI nào có thể thay thế con người làm việc này.

b. Mỗi requirement sẽ đươc gán một cái unique ID dùng để reference sau này

2. Model: model ở đây là Simulink model, MATLAB code chỉ là một phần của model (MATLAB function block)

a. Model được coi như là Low Level Requirement + Software Architect + Detailed Design + Interface Design + Test Enviroment của bạn.

b. Thay vì viết vài trăm trang giấy viết phần design, interface, ta dùng sơ đồ khối để mô tả mối liên hệ, tương tác giữa các bộ phận.

c. System Engineer có thể simulate cái model để validate system requirement ngay khi nó chỉ là “paperware” thay vì đợi tới gần cuối project. Ta có thể coi đây là Executable Specification. Thay vì đọc vài trăm trang giấy, để hiểu rõ nó làm việc như thế nào, simply hit the play button and watch the animation.

d. Model cũng có thể tổng hợp từ nhiều models khác nhau cho nên ta dùng Simulink Check để verify model của mọi người đều meet modeling standard. Ví dụ như, tên model, tên subsystem, tên signal, layout từ trái sang phải, màu sắc … NASA viết vài trăm modeling rules gọi là NASA Style Guide cho Orion project. Automotive cũng có vài trăm rules cho riêng industry của mình.

e. Khi mổi phần model (subsystem) được làm xong, ta cần phải link nó với requirements trong Simulink requirement để đảm bảo tính liên kết của requirement đó với model. Khi được link thì requirement đó có status là nó đã được implemented. Program manager chỉ cần run model report là biết ngay tiến độ thi công để báo cáo cho khách hàng.

< Nguồn tác giả: Billy Bob >

Cài đặt Matlab 2018

Cảm nhận Học viên

Matlabthayhai. Powered by Blogger.

Sản phẩm sinh viên