Tuning MISO PI Controller for SIMO System
6 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hi!
I am currently trying to tune a two-input-one-output PI controller for my one-input-two-output system of a differential drive robot:

The System & Controller are modelled from a real world application:
The system input is the angular velocity ω, and through a simple forward kinematics model the outputs are the lateral deviation d from the center of the lane & the heading deviation ϕ. The error values (
&
) are then fed into two PI controllers for which their outputs are added to obtain ω.
&
) are then fed into two PI controllers for which their outputs are added to obtain ω.As this is my first attempt with simulink I coud not find a suitable resource for tuning my Controller, could someone help me out?
Thanks in advance!
2 Kommentare
Sam Chak
am 6 Okt. 2023
Hi @Hannes
Could you please demonstrate the dynamics of the unicycle, including the mathematical details of the control actions
and
? Based on your Simulink model, it seems that ω is defined as
. Additionally, could you explain why you need two PI controllers?
Antworten (1)
Sam Chak
am 7 Okt. 2023
Hi @Hannes
I've examined the Simulink model depicting the unicycle dynamics that is somewhat vaguely displayed under the block mask. The complete dynamics can be articulated as follows:
Through mathematical analysis, it becomes evident that the use of double PI controllers is unnecessary if your sole objective is to maintain the unicycle's trajectory along the x-axis in a straight line. In this scenario, a relatively straightforward nonlinear PD controller is more than sufficient for stabilizing the motion of the unicycle:
.Should one assume the small angle approximation (
), the controller can be approximated as a linear PD controller:
.If I find myself with some spare time, I might consider constructing the Simulink model.
tspan = linspace(0, 10, 10001);
x0 = [0 1 0]; % starting point (x0, y0) = (0, 1)
[t, x] = ode45(@odefcn, tspan, x0);
% Trajectory of Unicycle
figure(1), plot(x(:,1), x(:,2), 'linewidth', 1.5, 'color', '#50c0d9'), grid on, ylim([-1.2 1.2])
xlabel('x / unit'), ylabel('y / unit'), title('Trajectory of Unicycle')
% Angular velocity of Unicycle orientation
figure(2), plot(t, x(:,3), 'linewidth', 1.5, 'color', '#f1a861'), grid on, xlabel('t'),
ylabel('Angular velocity, \omega'), title('Angular velocity of Unicycle orientation')
% Equations of Motion for a Unicycle
function xdot = odefcn(t, x)
xdot = zeros(3, 1);
% Parameters
v = 1; % parameter related to the pedaling speed
yref = 0; % reference coordinate
% Controller, (omega, ω)
Kp = 1; % proportional gain
Kd = 2; % derivative gain
omega = - Kp*(x(2) - yref)/(v*cos(x(3))) - Kd*tan(x(3));
% Unicycle dynamics
xdot(1) = v*cos(x(3)); % dx/dt
xdot(2) = v*sin(x(3)); % dy/dt
xdot(3) = omega; % dθ/dt, rate of steering angle
end
0 Kommentare
Siehe auch
Kategorien
Mehr zu Aerospace Applications finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!






