做文创的网站,wordpress 模板代码,北京网站优化提供商,网页怎么制作动画以前在做车辆跟踪控制的时候发现在针对有多个X和多个Y对应的路径插补时候#xff0c;总是报错#xff0c;因为MATLAB里面的interp1插补函数它要求x要唯一对应一个y#xff0c;当路径以单独的x或者y来求插补时候的时候就报错。由于在使用Matlab的interp1函数进行插值时#…以前在做车辆跟踪控制的时候发现在针对有多个X和多个Y对应的路径插补时候总是报错因为MATLAB里面的interp1插补函数它要求x要唯一对应一个y当路径以单独的x或者y来求插补时候的时候就报错。由于在使用Matlab的interp1函数进行插值时采样点必须是唯一的否则可能会出现问题。如果输入的采样点包含重复的值interp1函数可能无法确定应该在哪个点进行插值。这会导致函数返回错误或不确定的结果。为了解决这个问题你可以先对输入的采样点进行处理确保它们是唯一的。你可以使用Matlab的unique函数来去除重复值或者通过其他方法确保采样点的唯一性。
针对这个问题我根据路径的长度来插补而不是利用单一的x或者单一的y。在遇到类似的情况时候也可以用范数来插补。具体代码如下
clc,clear
close all
cx [];
cy [];
x0 (t_step) 15*sin(2 * t_step 1);
y0 (t_step) -20*cos(t_step 0.5);
for theta0.9*pi:pi/200:1.8*picx(end 1) x0(theta);cy(end 1) y0(theta);
end
refer_path_primary [cx, cy];
x refer_path_primary(:, 1);
y refer_path_primary(:, 2);
points [x; y];
ds 0.01 ;%等距插值处理的间隔
distance [0, cumsum(hypot(diff(x, 1), diff(y, 1)))];
distance_specific 0:ds:distance(end);
hypot(diff(x, 1), diff(y, 1));
diff(x, 1);
diff(y, 1);
s 0:ds:distance(end);
refer_path interp1(distance, points, distance_specific, spline);
len_path length(refer_path);
refer_path_x refer_path(:,1); % x
refer_path_y refer_path(:,2); % y
for i1:length(refer_path)if i1dx refer_path(i 1, 1) - refer_path(i, 1);dy refer_path(i 1, 2) - refer_path(i, 2);ddx refer_path(3, 1) refer_path(1, 1) - 2 * refer_path(2, 1);ddy refer_path(3, 2) refer_path(1, 2) - 2 * refer_path(2, 2);elseif ilength(refer_path)dx refer_path(i, 1) - refer_path(i - 1, 1);dy refer_path(i, 2) - refer_path(i - 1, 2);ddx refer_path(i, 1) refer_path(i - 2, 1) - 2 * refer_path(i - 1, 1);ddy refer_path(i, 2) refer_path(i - 2, 2) - 2 * refer_path(i - 1, 2);elsedx refer_path(i 1, 1) - refer_path(i, 1);dy refer_path(i 1, 2) - refer_path(i, 2);ddx refer_path(i 1, 1) refer_path(i - 1, 1) - 2 * refer_path(i, 1);ddy refer_path(i 1, 2) refer_path(i - 1, 2) - 2 * refer_path(i, 2);endrefer_path(i,3)atan2(dy, dx);%refer_path(i,4)(ddy * dx - ddx * dy) / ((dx ^ 2 dy ^ 2) ^ (3 / 2));refer_path(i,5) dx;refer_path(i,6) dy;
end
for i1:length(refer_path)if i1dphai refer_path(i 1, 3) - refer_path(i, 3);elseif ilength(refer_path)dphai refer_path(i, 3) - refer_path(i - 1, 3);elsedphai refer_path(i 1, 3) - refer_path(i, 3);endrefer_path(i, 7) dphai;%yaw
end
x_drefer_path_x;
y_drefer_path_y;
phai_d refer_path(:, 3);
dx_d refer_path(:, 5);
dy_d refer_path(:, 6);
dphai_d refer_path(:, 7);
figure(1)
plot(refer_path(:, 1), refer_path(:,2), Colorm,LineStyle--,LineWidth2)
axis equal
grid on