PID for fixed distance

8 ビュー (過去 30 日間)
Andrea Tonelli
Andrea Tonelli 2022 年 11 月 8 日
コメント済み: Andrea Tonelli 2022 年 11 月 9 日
Hello everyone, I attach here my model of a car moving towards that must maintain a fixed distance of 100m from the car in front of it. I have drawn all the schemes which seem to be correct. I have a signal reference that must be followed with a constant error, but I'm not able to understand why I have divergence between the reference signal and the actual position of my vehicle, whichever value of the gains I use, from the smallest to the largest.
I really hope someone could help me. Thank you very much!

回答 (1 件)

Sam Chak
Sam Chak 2022 年 11 月 9 日
I think your control design part is okay. But the divergence issue is probably related to the way you setup the simulation (Error – 100). Thus, I have made a super simple model (ignoring the aerodynamics and frictions) in this example.
The Auto-Cruise Control Car should follow the Reference, which is the trajectory of the "Car-in-front – 100".
% Super Simple Car motion model
J = 1000;
s = tf('s');
Gp = minreal(1/(J*s^2))
Gp = 0.001 ----- s^2 Continuous-time transfer function.
% Super Simple PID Controller
Gc = pid(0, 0, 500, 0.5)
Gc = s Kp + Kd * -------- Tf*s+1 with Kp = 0, Kd = 500, Tf = 0.5 Continuous-time PDF controller in parallel form.
Gcl = minreal(feedback(Gc*Gp, 1))
Gcl = 1 ------------- s^2 + 2 s + 1 Continuous-time transfer function.
Amp = 50;
Tp = 300; % 1 cycle period
Tf = 300; % final time simulation (5 minutes)
Ts = 0.1; % sampling time interval
[u, t] = gensig('sine', Tp, Tf, Ts); % standard sine wave generation
Car = Amp*u + 150; % Car in front of your vehicle
Ref = Car - 100; % Reference for Auto-Cruise Control Car
y = lsim(Gcl, Ref, t);
plot(t, Car, t, y, 'linewidth', 1.5), grid on, xlabel('t'), ylabel('Position of Vehicles')
legend('Car-in-front', 'Auto-Cruiser', 'location', 'best', 'FontSize', 14)
error = Car - y; % relative distance of Car-in-front ahead of your vehicle
plot(t, error, 'linewidth', 1.5), grid on, xlabel('t, sec'), ylabel('Relative Distance, m')
title('ACC Car attempts to maintain a relative distance of 100 m')
By the way, in your 1st question, have you identified the cause of the problem (fuzzy controller) based on the given advice?
You can update the progress, or close it if your problem solved. Thanks.
  3 件のコメント
Sam Chak
Sam Chak 2022 年 11 月 9 日
I'm unsure, but it seems that inside the feedback loop, you keep on injecting "–100" into error (relative distance between Car-in-front and your ACC car).
Try modifying your Simulink model such that the blocks work like these functions:
Car = trajectory; % Car in front of your vehicle
Ref = Car - 100; % Reference for Auto-Cruise Control Car
Andrea Tonelli
Andrea Tonelli 2022 年 11 月 9 日
Still nothing changes. I will try to work on the gains.

サインインしてコメントする。

製品


リリース

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by