我觉得我的任务就是重复一些研究性并不高的事情,今天的收获其实并不大,客观原因就是有点困,主观原因,还没有想到,或许是积极性不高。下次再做相关内容我要把前端的代码跑通。因为做这些事情,我能收获的只有扩展知识面,不适合深入研究。
关于A星,主要解决了以下问题:
1. 路径不过起始点
排除了B线条优化的问题,确实是算法有问题。因为A星节点的索引值是整数,所以要把路径点通过格子转换成整数索引值(函数calc_xyindex()实现),作为节点的标识。所以实际得到的路径经过的是格子的顶点,不一定是路径的起始点和终点。只需自己加上这些点即可。
这里的gx,gy是起点,在调用规划函数的时候就已经把起点写到了终点的位置,这样规划得到的路径是从实际起点到终点的连线。(A星的路径是从最后一个点根据节点向前索引的)
2. 路径与障碍物相交&无法收敛
从图中可以看出完全是B样条优化造成的问题,最终选用无优化的路径。在我尝试增大避障安全距离的时候,发现了另外一个问题,A星搜索点无限向外扩展错过了终点无法收敛。
是代码里的判断到达终点的条件有问题。
开始是判断当前点与终点的节点索引值相同就认为找到了终点,目前看起来是没有问题的。实际有问题,只好换一种。改为判断当前点的实际经纬度与终点经纬度的距离<避障安全距离,则认为到达了终点。
3. 几个小问题
(1)在循环外边加入终点sx1,sx2,别加到循环里。
(2) 不要写else了,否则最终a的值是对最后一个输入点判断得到的值,我想表达的是只要有跟输入点相等的a=1。