按照RRT*算法中的可达性分析方法优化这行代码:function iscol = iscollision1(Pnear,Pnew,Pvec,Img) iscol = false; step = 30; for n = 0:step p = Pnear + n*Pvec; if unfeasible(p,Img) iscol = true; break; end end if unfeasible(Pnew,Img) iscol = true; end end function unfeasible = unfeasible(p,Img) % disp('in the check!'); unfeasible = false; if (p(1) < 1 || p(2) < 1 || p(1) >= size(Img,1) || p(2) >= size(Img,2) || Img(floor(p(1)),floor(p(2))) == 0) unfeasible = true; end end function iscol = iscollision2(this_p,Pnew,dist,Img) iscol = false; Pvec = [Pnew(1) - this_p(1), Pnew(2) - this_p(2)]; Pvec = Pvec/norm(Pvec); for n = 0:dist p = this_p + n*Pvec; if unfeasible(p,Img) iscol = true; end end end
时间: 2023-12-15 15:04:52 浏览: 102
按照RRT*算法中的可达性分析方法,可以将碰撞检测部分优化如下:
```
function iscol = iscollision1(Pnear,Pnew,Pvec,Img)
iscol = false;
step = 30;
% 计算路径上的所有点
path_points = Pnear + step * Pvec * (0:floor(norm(Pnew-Pnear)/(step*norm(Pvec))));
% 检查每个点是否碰撞
for i = 1:size(path_points,1)
if unfeasible(path_points(i,:),Img)
iscol = true;
break;
end
end
if unfeasible(Pnew,Img)
iscol = true;
end
end
```
这里我们首先计算出从Pnear到Pnew的所有路径上的点,然后逐个检查每个点是否碰撞。这样可以减少计算次数,从而提高碰撞检测的效率。
相关问题
function iscol = iscollision1(Qnear,Qnew,Pvec,map) iscol = false; step = 1; for n = 0:step p = Qnear + n*Pvec; if unfeasible(p,map) iscol = true; break; end end if unfeasible(Qnew,map) iscol = true; end end
这段代码也是RRT算法的一部分,作用是检测从新节点Qnew到树中已有节点的路径上是否与障碍物相交。具体来说,iscollision1函数输入参数包括:Qnear表示已有节点,Qnew表示新节点,Pvec表示从已有节点到新节点的向量,map表示地图信息。首先将iscol变量初始化为false,表示当前路径不与障碍物相交。然后,从Qnear到Qnew的路径上按照固定步长(step)逐个计算线段端点p,判断线段是否与障碍物相交。具体来说,unfeasible函数用于检测当前点p是否在障碍物内部,如果在,则说明当前路径与障碍物相交,将iscol变量置为true,并跳出循环。最后,再检测新节点Qnew是否在障碍物内部,如果是,则同样将iscol变量置为true。
function iscol = iscollision2(this_p,Qnew,dist,map) iscol = false; Pvec = [Qnew(1) - this_p(1), Qnew(2) - this_p(2)]; Pvec = Pvec/norm(Pvec); for n = 0:dist p = this_p + n*Pvec; if unfeasible(p,map) iscol = true; end end end
这段代码也是RRT算法的一部分,作用是检测从新节点Qnew到当前节点this_p的路径上是否与障碍物相交。具体来说,输入参数包括:this_p表示当前节点,Qnew表示新节点,dist表示当前节点到新节点的距离,map表示地图信息。首先将iscol变量初始化为false,表示当前路径不与障碍物相交。然后,计算从当前节点this_p到新节点Qnew的方向向量Pvec,并将其归一化。接着,从当前节点this_p到新节点Qnew的路径上按照固定步长(dist)逐个计算线段端点p,判断线段是否与障碍物相交。具体来说,unfeasible函数用于检测当前点p是否在障碍物内部,如果在,则说明当前路径与障碍物相交,将iscol变量置为true。最后,返回iscol变量表示是否与障碍物相交。
阅读全文