-
Notifications
You must be signed in to change notification settings - Fork 26
/
Copy pathcalccost.m
49 lines (48 loc) · 1.47 KB
/
calccost.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
function val = calccost(pos,obs,goal,goalfunc,obsdistlim)
if (isempty(goalfunc))
goalfunc = 'linear';
end
val = 0;
x = pos(1);
y = pos(2);
goalx = goal(1);
goaly = goal(2);
for i = 1:length(obs)
ob = obs{i};
if (isfield(ob, 'sig'))
ob.sigx = ob.sig;
ob.sigy = ob.sig;
end
switch (goalfunc)
case {'linear' 'square'}
obval = 20*exp(-1/2*((x-ob.x)^2/ob.sigx^2+(y-ob.y)^2/ob.sigy^2));%1/(2*pi*ob.sigx*ob.sigy) *
case {'linear3' 'square3'}
obval = 1/20*exp(-1/2*((x-ob.x)^2/ob.sigx^2+(y-ob.y)^2/ob.sigy^2));%1/(2*pi*ob.sigx*ob.sigy) *
otherwise
obval = exp(-1/2*((x-ob.x)^2/ob.sigx^2+(y-ob.y)^2/ob.sigy^2));%1/(2*pi*ob.sigx*ob.sigy) *
end
if (isnan(obval))
obval = 0;
end
obval = obval + max(1/5*(obsdistlim-norm([ob.x ob.y]-[x y]))/obsdistlim, 0);
val = val + obval;
end
switch (goalfunc)
case 'linear'
goalval = sqrt((x - goalx)^2 + (y - goaly)^2);
case 'linear2'
goalval = 1/20 * sqrt((x - goalx)^2 + (y - goaly)^2);
case 'linear3'
goalval = 1/400 * sqrt((x - goalx)^2 + (y - goaly)^2);
case 'square'
goalval = (x - goalx)^2 + (y - goaly)^2;
case 'square2'
goalval = 1/200 * (x - goalx)^2 + (y - goaly)^2;
case 'square3'
goalval = 1/20000 * (x - goalx)^2 + (y - goaly)^2;
case 'exp'
goalval = expsqrt((x - goalx)^2 + (y - goaly)^2);
otherwise
goalval = 0;
end
val = val + goalval;