Plotting a relation from a describing equation - optimized trapezoidal steering optimization
조회 수: 2 (최근 30일)
이전 댓글 표시
I am trying to write a program which will allow me to quantify how optimized trapezoidal steering differs from the exact Ackerman steering for a given set of steering parameters (
). To do that I want to find the root mean square error between the outer angle in trapezoidal steering (
) and in Ackerman steering (
) for a given inner angle
.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/242750/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/242751/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/242752/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/242753/image.png)
The Ackerman relation is described by the following equation (1):
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/242754/image.png)
Optimized trapezoidal steering steering is described by (2):
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/242755/image.png)
To find
, I created two vectors - one corresponding to the inner angles and the one to the outer angles. Then for each inner angle (in a loop) I substituted the whole vector of outer angles into eq. 2 and looked for the outer angle which results in
being minimal. Below is my code:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/242756/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/242757/image.png)
close all
clear all
%% Constants
W = 2400; %track width in mm
L = 4800; %wheelbase in mm
D = 400; % steering arm length
B = 8* (pi/180); % angle beta with conversion to radians
in_vec = -40:40 ; %vector of inner angles in degrees
in_vec_rad = in_vec*(pi/180); %converted to radians
out_vec = -50:1e-3:50; %vector of outer angles for comparisons (much wider in span)
out_vec_rad = out_vec*(pi/180); %converted to radians
outer_a = zeros(1,numel(in_vec_rad)); %preallocation
outer_t_estim = zeros(1,numel(in_vec_rad));
offset_t = zeros(1,numel(in_vec_rad));
for i = 1:numel(in_vec_rad)
outer_a(1,i) = acot(W/L+cot(in_vec_rad(1,i))); %ackerman outer angles
% here I look for outer angle value that makes the offset the smallest
offset_t = abs((W/D) + ((W/D-2*sin(B)).^2-(cos(B-out_vec_rad)-cos(B+in_vec_rad(1,i))).^2).^(1/2) - sin(B+in_vec_rad(1,i))-sin(B-out_vec_rad));
[numt,idxt]=min(offset_t);
outer_t_estim(1,i) = out_vec_rad(1,idxt);
end
figure(1)
plot(outer_a,in_vec_rad,'Color','r','DisplayName','Calculated')
grid on
hold on
plot(outer_t_estim,in_vec_rad,'--','Color','b','DisplayName','Estimated')
legend('Location','best');
The problem I am facing is that the final
plots as a straight line. Is the approach generally incorrect or is there something wrong in the code?
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/242758/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/242759/image.jpeg)
댓글 수: 0
답변 (2개)
Pranav Murali
2020년 3월 19일
Hi Igor,
I see that you’ve been trying to visualize the difference between optimized trapezoidal and Ackerman steering. Finding out the root mean square error between the outer angles of Ackerman and optimized trapezoidal steering seems to be a promising approach. The code is does exactly what you have described. However, output angle is the only parameter that changes inside the loop.
Since all the other terms inside your formula are constants, the offset depends directly on the array of output angles. The vector storing the output angles you have created is linearly spaced. This causes the result also to be a linearly increasing vector since there is no relationship between a variation in the output angle to any other term in the equation. The smallest element is always at the first position. Hence you arrive at the output that is visible, your current method will produce the same pattern as it is directly related to the smallest element in the output angle vector.
댓글 수: 0
Robert Shaefer
2021년 4월 12일
there is an error in the equation (2). It should read:
....= w/d "minus" sqrt(....
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/581226/image.png)
댓글 수: 1
Batuhan Yükseker
2021년 9월 22일
Hi can you share updating code on script? İt is not understood =w/d 'minus'sqrt(.. Where will we write in equation 2?
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!