Error message when running Simulink model with regards to Adaptive High-Order Terminal Sliding Mode Control

3 次查看(过去 30 天)
Good day,
I have been trying to recreate the following paper, 'Adaptive High-Order Terminal Sliding Mode Control Based on Time-Delay Estimation for the Robotic Manipulators with Backlash Hysteresis'. My Simulink model includes the following blocks:
That is, I tried to recreate as per the block diagram seen in the journal paper below (Figure 3):
But each time I run the simulink model,I get the following error message and two warning messages:
"Simulation
Component:Simulink | Category:Block warning
Attempt to raise negative value to a non-integer power in 'Concise_Full_System_Figure_3_22th_January_2020a/TSMC/Subsystem6/Math Function1'.
Component:Simulink | Category:Block warning
An error occurred while running the simulation and the simulation was terminated
Caused by:
Component:Simulink | Category:Block error"
The first warning message is due to the following Math function block (highlighted in yellow) present inside the control law subsystem of my simulink model screenshot,
The second warning message is due to the following block highlighted in yellow present inside the terminal sliding mode control (TSMC) subsystem of my simulink model screenshot,
The Error message 'Derivative of state '1' in block 'Concise_Full_System_Figure_3_22th_January_2020a/Robotic Manipulator/Integrator' at time 0.28250000000000003 is not finite. The simulation will be stopped. There may be a singularity in the solution. If not, try reducing the step size (either by reducing the fixed step size or by tightening the error tolerances) ' is due to the following Integrator block highlighted in yellow as seen below:
The warning messages are indicated to the following equations given in paper, Equation 14 and Equation 19 that were recreated in the Simulink model), with regards to e^psi (that is th error signal^0.9 value, as specified in the experiment),
My concern is, how do I fix the above error message. I did just test the robotic manipulator on its own individually, and it did work on its own. I see the problem comes from the terminal sliding mode control (TSMC), wherein the term e^psi given by has been used. Maybe there is a way to deal with the negative error of , other than using the signed power block for the error signal being fed, as seen below:
I would be very grateful if someone can suggest with the above, as I have been stuck with this problem from many weeks.
Thank you.

回答(1 个)

Sam Chak
Sam Chak 2024-1-24
The power term , where , in the sliding surface equation (Eq. 12), , can lead to issues, and it may even be incorrect to follow the paper because it produces complex numbers when the error becomes negative.
err = -1;
psi = 0.9;
pow = err^(psi)
pow = -0.9511 + 0.3090i
While you can address the complex-valued problem by using the absolute value function, it no longer yields the correct control action. I understand this may seem absurd, as both the absolute value and surd functions are used together.
pow = abs(err)^(psi)
pow = 1
To rectify the sign issue, a radical change is needed for the term by multiplying it with the sign function. I refer to this as the Radical Sign function.
pow = abs(err)^(psi)*sign(err)
pow = -1
When it comes to the singularity issue, I believe it might be caused by the term when the error is zero, but the rate of change of error is non-zero. As demonstrated below, this term becomes infinitely large.
err = 0;
pow = err^(psi - 1)
pow = Inf
Given that you have opted for , which essentially makes the Radical Sign function nearly linear, it could be more advantageous to utilize the linear term directly. By doing so, you can evaluate whether the Simulink model runs smoothly without any complications when employing a linear sliding surface . This approach serves as your baseline for Higher-order Linear Sliding Mode Control.
To tap into the nonlinear capabilities of the Terminal Sliding Mode approach, it is recommended to select a value of ψ in proximity to zero rather than 0.9.
y = @(x, psi) abs(x).^(psi).*sign(x);
x = linspace(-1, 1, 20001); % range -1 ≤ x ≤ 1
plot(x, y(x, 0.9), 'linewidth', 1.5), hold on % when psi = 0.9
plot(x, y(x, 0.2), 'linewidth', 1.5), grid on % when psi = 0.2
title('Radical Sign Function')
xlabel('x'), ylabel('y')
legend('\psi=0.9', '\psi=0.2', 'fontsize', 16, 'location', 'NorthWest')
  4 个评论
Syeda Nadiah Fatima
Helo @Sam Chak,
Sorry for my late response. I still have been trying to figure out on the error and trying to get it working. But I still face the same error. Also, the higher order SMC is not working.
I wanted to ask, if I am allowed to email you my simulink model to check on my connections in the model?
Sam Chak
Sam Chak 2024-1-29
If the higher-order linear SMC doesn't work, then the problem may lie with either the controller or the rmanipulator. If you have a working controller from your previous publications, I would suggest plugging it in to see if it runs. This will help you identify the probable cause of the issue.
Checking Simulink models with many masked subsystems can be demanding because our human eyes are not trained to mentally translate the blocks and signal lines into mathematical operators and symbolic variables. However, verifying control equations is much easier in MATLAB code, as you can simply compare the code's equations with those written on paper.
As a suggestion, I often advise young students to derive the control system equations and write code that models the system according to the programming language's rules (such as MATLAB, Python, or Julia). This way, it becomes easier to check for mistakes in typos, signs, or incorrect mathematical functions (such as the Radical Sign Function).
Once the code is successfully implemented, constructing a Simulink model based on the MATLAB code becomes a straightforward task.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Modeling 的更多信息

产品


版本

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by