I am getting an error "Index in position 1 exceeds array bounds. Index must not exceed 1." Error in "v_x(n) = fmincon(fun_x(n), x0, A_x(n,:), b_x(n,:)); Can someone help"
1 view (last 30 days)
Show older comments
Here is the code:
t_span = 30;
dt = 0.01;
t = 0:dt:t_span;
x(1) = 0; %Initial condition for state x
y(1) = 0; %Initial condition for state y
x0 = [0]; %initial condition for v_x in fmincon
y0 = [0]; %initial condition for v_y in fmincon
goal = [3; 5]; %final trajectory coordinate
obs_1_center = [1; 2]; %obstacle coordinate
D_obs = 0.5; %some positive value
R = 0.5; %radius of the obstacle
K = 1; %controller gain
alpha = 0.5; %constant
for n = 1:length(t)
obs_1_x(n) = obs_1_center(1) + R*cos(0.01*n);
obs_1_y(n) = obs_1_center(2) + R*sin(0.01*n);
v_des_x(n) = - K * (x(n) - goal(1));
v_des_y(n) = - K * (y(n) - goal(2));
A_x(n) = - (x(n) - obs_1_x(n)) / norm (x(n) - obs_1_x(n)) ;
A_y(n) = - (y(n) - obs_1_y(n)) / norm (y(n) - obs_1_y(n)) ;
b_x(n) = alpha * ( norm(x(n) - obs_1_x(n)) - D_obs );
b_y(n) = alpha * ( norm(y(n) - obs_1_y(n)) - D_obs );
fun_x{n} = @(v_x)((norm(v_x(n) - v_des_x(n)))^2);
fun_y{n} = @(v_y)((norm(v_y(n) - v_des_y(n)))^2);
v_x(n) = fmincon(fun_x(n), x0, A_x(n,:), b_x(n,:));
v_y(n) = fmincon(fun_y(n), y0, A_y(n,:), b_y(n,:));
x(n+1) = x(n) + dt * (v_x(n));
y(n+1) = y(n) + dt * (v_y(n));
end
0 Comments
Accepted Answer
Jan
on 6 Dec 2022
Change:
fun_x{n} = @(v_x)((norm(v_x(n) - v_des_x(n)))^2);
fun_y{n} = @(v_y)((norm(v_y(n) - v_des_y(n)))^2);
v_x(n) = fmincon(fun_x(n), x0, A_x(n,:), b_x(n,:));
v_y(n) = fmincon(fun_y(n), y0, A_y(n,:), b_y(n,:));
to:
fun_x{n} = @(v_x)((norm(v_x - v_des_x(n)))^2);
fun_y{n} = @(v_y)((norm(v_y - v_des_y(n)))^2);
v_x(n) = fmincon(fun_x{n}, x0, A_x(n), b_x(n));
v_y(n) = fmincon(fun_y{n}, y0, A_y(n), b_y(n));
In this definition:
@(v_x)((norm(v_x(n) - v_des_x(n)))^2)
the inout argument v_x is a scalar. Then v_x(n) must fail for n > 1.
A_x(n) = ... creates a row vector, but A_x(n,:) requests the n.th row. A(n) uses the n.th element instead.
More Answers (0)
See Also
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!