Getting an 'Array indices must be positive integers or logical values' error
    1 view (last 30 days)
  
       Show older comments
    
In the given code, waypoints is a 3x3 matrix. The error comes in line 8. 
persistent waypoints0 traj_time d0
    if nargin > 2
        d = waypoints(:,2:end) - waypoints(:,1:end-1);
        d0 = 2 * sqrt(d(1,:).^2 + d(2,:).^2 + d(3,:).^2);
        traj_time = [0, cumsum(d0)];
        waypoints0 = waypoints;
    else
        if t >= traj_time(end)
            t = traj_time(end);
        end
        t_index = find(traj_time > t,1) - 1;
        if (t_index == 0)
            t_index = 1;
        end
        if(t == 0)
            desired_state.pos = waypoints0(:,1);
        else
            scale = (t-traj_time(t_index)) / d0(t_index);
            index = [(t_index-1)*8+1:t_index*8];
        end
    end     
4 Comments
  Guillaume
      
      
 on 17 Sep 2019
				We really need the function line that this code goes into. The full text of the error message would be extremely useful as well. Also, tell us if it's when the persistent variables are initialised (i.e. nargin > 2) or when it's using them (nargin <= 2).
It's also not clear what the 3rd input would be. I can see just one input needed for initialisation (waypoints) and one input needed afterward (t).
Accepted Answer
  Guillaume
      
      
 on 17 Sep 2019
        
      Edited: Guillaume
      
      
 on 17 Sep 2019
  
      You should read the comments at the top of the function and understand them.
In particular, the function must be initialised first by calling it with
trajectory_generator([], [], waypoints);
where waypoints is a 3xN matrix.
Only then can you use it with
desired_state = traj_generator(t, state);
The error you see occurs when traj_time is empty (end is indeed an invalid index in that case). And traj_time can only be empty if the function has not been initialised.
Granted, the function should check that it's been initialised before using the persistent variables. You should add than check.
...and take out the nested functions which should be local functions
...and indent the code properly to make it easier to read and debug
...and fix all the missing semicolons and any other mlint warning
0 Comments
More Answers (0)
See Also
Categories
				Find more on Operators and Elementary Operations in Help Center and File Exchange
			
	Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!