PID Controller Gain adjust
조회 수: 1 (최근 30일)
이전 댓글 표시
Hallo Jungs bitte jemand mir helfen?: habe einen pid-Regler für ein Selfdriving car entwickeln. das Problem ist das Fahrzeug fährt nicht in Centerline wie geplann und nach änderung der Strecke, wird der Fehler noch schlimer. kann jemand mir helfen?
function LateralLongitudinal_Controller(obj, cte)
kp_lat = 0.08; % Parameter für laterale Regelung
kd_lat = 0.8;
ki_lat = 0.000002;
kp_lon = 0.1; % Parameter für longitudinale Regelung
kd_lon = 0.01;
ki_lon = 0.000001;
dcte = cte - obj.old_cte;
obj.cte_intergral = obj.cte_intergral + cte;
% Anti-Windup für den integralen Anteil
obj.cte_intergral = max(-obj.steering_angle_limit / ki_lat, min(obj.steering_angle_limit / ki_lat, obj.cte_intergral));
obj.old_cte = cte;
% Lateral Control (quer)
steering = kp_lat * cte + kd_lat * dcte + ki_lat * obj.cte_intergral;
% Begrenzen Sie den Lenkwinkel
steering = max(-obj.steering_angle_limit, min(obj.steering_angle_limit, steering));
% Longitudinal Control (längs)
desired_velocity = obj.max_velocity; % Setzen Sie die gewünschte Geschwindigkeit
velocity_error = desired_velocity - obj.states(4);
% Fügen Sie die max_acceleration-Eigenschaft hinzu
max_acceleration = 10.0; % Setzen Sie hier den gewünschten maximalen Beschleunigungswert ein
% Reduziere die Geschwindigkeit in der Nähe von Kurven
curvature_threshold = 0.4; % Setzen Sie den Krümmungsschwellenwert ein
if abs(cte) > curvature_threshold
desired_velocity = 10 * obj.max_velocity; % Reduziere die Geschwindigkeit in der Nähe von Kurven
end
acceleration = kp_lon * velocity_error + kd_lon * obj.states(4) + ki_lon * sum(obj.states(1:4));
% Begrenzen Sie die Beschleunigung
acceleration = max(-max_acceleration, min(max_acceleration, acceleration));
control_signal = [steering, acceleration];
obj.update_input(control_signal);
end
댓글 수: 0
답변 (2개)
Abhinaya Kennedy
2024년 1월 25일
Hi Ivan,
It appears that you are encountering issues with your PID controller for a self-driving car in MATLAB. The car does not drive in the centreline as expected, and when changing the route, the error increases. I'll help you by providing a checklist to debug and improve the PID controller:
1. Retune PID Gains: Adjust “kp_lat”, “kd_lat”, “ki_lat”, “kp_lon”, “kd_lon”, “ki_lon” to improve response.
2. Check Integral Windup: Ensure anti-windup is effectively preventing integral term accumulation.
3. Verify Steering Limits: Confirm “steering_angle_limit” matches vehicle dynamics and path requirements.
4. Adjust Velocity for Curvature: Ensure reduced velocity during high curvature is appropriate.
5. Validate Trajectory: Make sure the trajectory is accurately interpolated and represents the desired path.
6. Examine State Update: Ensure the “update_state” method accurately reflects vehicle dynamics.
7. Control Input Smoothing: Confirm the low-pass filter factor is balanced for response and smoothness.
8. Error Calculation: Verify CTE calculation in “compute_error” is correct and represents lateral error accurately.
9. Simulation Parameters: Check time step (“ts”), number of steps (“N”), and initial conditions for realism.
10. Use Visualization: Plot trajectory, vehicle path, and control inputs to identify issues.
11. Search for Bugs: Review code for errors, especially in units and coordinate transformations.
12. Test Varied Conditions: Evaluate controller performance under different speeds, trajectories, and road conditions.
13. Consider External Factors: Account for road grade, friction, and environmental effects on vehicle control.
Hope this helps.
댓글 수: 1
Sam Chak
2024년 6월 13일
편집: Sam Chak
2024년 6월 13일
Your checklist didn't check if 'dcte' is the time derivative of the error signal 'cte'.
Wouldn't it be far better to apply "formulas" for determining the PID gains to achieve specified performance requirements if the linear mathematical model is known in the simulation?
[Kp, Ki, Kd] = f(model, performance values).
참고 항목
카테고리
Help Center 및 File Exchange에서 PID Controller Tuning에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!