Return Vector of length zero ??

4 次查看(过去 30 天)
I am building a robot simulation by solving the differential equations at different input speed values, the function uses [0 0 0]=[x y theta] as initial conditions then updates the initial conditions every iteration. when i use a for loop to input the number of iterations i want the equation to be solved it works fine!, however when i use a while loop to keep the function solving as i input the speed (through a edit text in gui) i get an error message "KPATH returns a vector of length 0, but the length of initial conditions vector is 3." . How can function return a zero length vector ? or the while loop cannot be used in this case ?
%
**code
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global sld1
global sld2
check = get(handles.checkbox1,'Value');
initials = zeros(1,3); %start at origin
p = par();
tspan = [0 1];
while check == true
p.WL = sld1 ;p.WR = sld2;
sol= ode23(@Kpath, tspan, initials,[],p);
[t,s] = ode23(@Kpath, tspan, initials,[],p);
initials = deval(sol,2);
xlabel('x-position [m]');ylabel('y-position [m]');
title('robot path');
grid on
plot(s(:,1),s(:,2),'b','linewidth',1.5);
hold on
for j = 1:length(s(:,1))
q = plot(s(j,1),s(j,2),'ro','MarkerSize',5,'linewidth',1.5);
axis([-2.5 2.5 -2.5 2.5]);grid on;
pause(0.01)
delete(q)
end
end
function p = par()
p.L = 0.12; %length [m]
p.r = 0.1; %radius of wheel [m]
function dt = Kpath(t,c,p)
x = c(1);y = c(2);th = c(3);
dx = (((p.r*p.WL)+(p.r*p.WR))/2) * cos(th);
dy = (((p.r*p.WL)+(p.r*p.WR))/2) * sin(th);
dth= ((p.r*p.WL)-(p.r*p.WR))/p.L;
dt = [dx;dy;dth]

采纳的回答

Star Strider
Star Strider 2017-4-18
I am guessing here because I cannot run your code.
Defining ‘initials’ as the last row of ‘s’ may be what you want:
initials = s(end,:);
The new initial conditions will be the last row of the previous solution vector.
  6 个评论
Moustafa Aboubakr
Moustafa Aboubakr 2017-4-19
Thanks alot i removed the global variables and it worked fine :) i have no idea why but it works :) thanks again

请先登录,再进行评论。

更多回答(1 个)

Jan
Jan 2017-4-18
Kpath is called with the parameters defined by p.WL = sld1 ;p.WR = sld2. If sld1 and sld2 are empty matrices, KPath replies an empty array also.
Unfortunately these parameters are defined as global variables. Then all other functions can set the values to empty matrices and debugging is tedious. This is the well known disadvantage of globals. Try to avoid it, because there is always a better way.
Use anonymous functions instead of parmeters in the call of ODE23, see http://www.mathworks.com/matlabcentral/answers/1971.
  1 个评论
Moustafa Aboubakr
Moustafa Aboubakr 2017-4-19
Thanks alot i removed the global variables and it worked fine :) i have no idea why but it works :) thanks again

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by