5 views (last 30 days)

Show older comments

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 .

The Ackerman relation is described by the following equation (1):

Optimized trapezoidal steering steering is described by (2):

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:

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?

Pranav Murali
on 19 Mar 2020

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.

Robert Shaefer
on 12 Apr 2021 at 23:19

there is an error in the equation (2). It should read:

....= w/d "minus" sqrt(....

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

Start Hunting!