Lateral Driver does not drive full circle
1 次查看(过去 30 天)
显示 更早的评论
Hi community,
i am building a vehicle simulation and i am stuck with the driver. Task is to drive a full circle but unforunatly the drive can't manage the jump of the yaw angle from pi to -pi. I am using the Lateral Driver from the Vehicle Dynamics Blockset in Stanley mode. I tried to play with the gains, but couldn't achive any better results. Any tips?
Thank you,
Simon
Pose1: X, Pose2 [m]: Y [m], Pose3: YAW [rad]
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/927814/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/927819/image.png)
0 个评论
回答(1 个)
Yash Sharma
2024-3-22
Hi Simon,
Dealing with the discontinuity in yaw angle (heading) that jumps from (\pi) to (-\pi) (or vice versa) is a common issue in vehicle simulations and robotics, particularly when using control systems like the Stanley controller in vehicle dynamics simulations. This discontinuity can confuse the controller, causing erratic behavior around the transition points.
One common approach to handle this discontinuity is to ensure that the yaw angle difference (error) passed to the controller is always within a continuous range, typically between (-\pi) and (\pi). This can be achieved by adjusting the calculation of the yaw error to account for the discontinuity.
Here's a conceptual approach to adjust the yaw error calculation:
function yaw_error = calculateYawError(target_yaw, current_yaw)
% Calculate the raw yaw error
raw_error = target_yaw - current_yaw;
% Adjust the yaw error to be within -pi to pi
yaw_error = atan2(sin(raw_error), cos(raw_error));
end
When integrating with the Stanley controller, you would use this approach to calculate the yaw error before passing it to the controller. Here's a conceptual example of how you might integrate the yaw error adjustment:
% Example values for demonstration
target_yaw = pi; % Target yaw angle
current_yaw = -pi + 0.1; % Current yaw angle close to the discontinuity
% Calculate the adjusted yaw error
yaw_error = calculateYawError(target_yaw, current_yaw);
% Now, use yaw_error with the Stanley controller or your control logic
% For example:
% control_signal = stanleyControlFunction(yaw_error, other_control_inputs...);
By carefully handling the yaw angle discontinuity and possibly adjusting the controller's parameters, you should be able to achieve smoother behavior from the vehicle simulation, even when driving in full circles or when the yaw angle transitions across the discontinuity.
Hope it helps!
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Vehicle Scenarios 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!