1

我在 simulink 中遇到了可变大小信号的大问题。我有一个 matlab 函数块,它的函数应该接受一个可变大小(运行时)数组,它需要评估输出。具体来说,输入数组是一个 1xn 整数数组,每个整数代表轨迹的一部分(例如,直线、直线、圆、半圆的序列,直线可以由数组表示 [1 1 2 3 1])。这个数组,所以轨迹,可以在模拟中改变(机器人的路径规划),但我得到了大量的错误。我已经在输入(没有大小)和输出(大小代表上限)的数据/端口中放置了可变大小。如果我在输入中设置一个上限,即使我输入可变大小,simulink 也会准确地期望输入具有该维度。

我认为 Simulink 会产生错误,因为不知道输入大小,它无法分配内存。一些帮助?

谢谢

一小部分代码...prim 是可变大小的输入,而所有输出都是可变大小的。

function [x, y, vx, vy, ax, ay, tf] = trajectoryPlanUniform(prim, discr, xdiscr, 

ydiscr, xi, yi, vmax, amax)

len = size(prim, 2);

tf = zeros(1, len+1); tf(1, 1) = 0;
x = zeros(6, len); y = zeros(6, len); 
vx = zeros(6, len); vy = zeros(6, len); 
ax = zeros(6, len); ay = zeros(6, len);

xitemp = xdiscr; yitemp = ydiscr;
vxitemp = 0; vyitemp = 0; vftemp = vmax;
axitemp = 0; ayitemp = 0; aftemp = amax;

xytot = zeros(2,len+1);
xytot(1,1) = xi; xytot(2,1) = yi;

for i = 1:len
    [x(:,i), y(:,i), vx(:,i), vy(:,i), ax(:,i), ay(:,i), tf(i+1)] = trajectoryCallUniform(prim(i), discr, xitemp, yitemp, vxitemp, vyitemp, vftemp, axitemp, ayitemp, aftemp, tf(i), vmax, amax);

    [xitemp, yitemp, vxitemp, vyitemp, axitemp, ayitemp] = calculateTrajectoryUniform(prim(i), x(:,i), y(:,i), vx(:,i), vy(:,i), ax(:,i), ay(:,i), tf(i+1));

    xytot(1,i+1) = xitemp;
    xytot(2,i+1) = yitemp;

    if i == (len - 1)
        vftemp = 0;
        aftemp = 0;
    end
end

end
4

0 回答 0