基于搜索的路径搜索
1.Graph Search Basis
1.1 配置空间下的规划
- 工作空间:机器人有不同的形状和尺寸,进行碰撞检测就需要花费很多时间,并且较难。
- 配置空间:把机器人当成一个点,把障碍物进行膨胀,规划就进行了简化。
1.2 图搜索整体思想:
搜索树的节点,然后从目标点回溯到起始点,找到路径。
- 维护容器:open list (访问的节点) and close list(已被扩展过的节点)
- 容器从起始点Xs开始初始化
- 循环
- 容器中弹出节点,放入close list ,不会被再次加入openlist
- 扩展节点
- 将扩展节点存入容器
- 结束循环,直到容器为空
1.3 图遍历
- BFS (广度优先):(每条边权重相等)
- 队列,先入先出。
- 层级搜索
- 地图中能找到最优路径,后面算法的基础
- DFS (深度优先):
- 堆栈,后入先出。
- 把某个分支走到底
- 地图中不能找到最优路径
2.Dijkstra and A*
算法
- 启发式搜索:人为设置规则,朝着目标点前进
- 贪心算法:欧氏距离或曼哈顿距离,有障碍时会误导,无法得到最优路径
- Dijkstra:使得路径有最小的 cost,弹出节点的方式是以g(n)最小的方式弹出。若存在,就能找到最优解,类似于BFS,若不存在,就相当于穷举。
- A*:Dijstra 算法加上一个启发式函数,弹出节点以f(n)=g(n) + h(n)最小的节点弹出.
- 要求h(n)<=h(n*) ,小于实际需要花费的最小路径:欧氏距离/无穷范数/0(Dijkstra)
- 要求h(n)<=h(n*) ,小于实际需要花费的最小路径:欧氏距离/无穷范数/0(Dijkstra)
- Weighted A*-> Anytime A*-> ARA*->D*:后续可深入研究
工程实现
- 将栅格地图表示为图:4连接或8连接
- 优先队列:见pdf
- 最优的启发式函数:相差太多就会使得搜索范围增加
- Tie Breaker:打破平衡,使得路径搜索时有偏向性,具体使用时参考ppt
3. Jump Point Search
系统性打破平衡的办法:要遵循对应的 look ahead rules
- 优点:在障碍物较多的时候,JPS 速度会很快。维护容器的代价更低等等。
- 缺点:但是在空旷的时候,JPS 迭代查询花的时间就会很多
- 限制:只适用于uniform grid map.
4. Homework
- 1.完成启发式函数:欧式、曼哈顿、最短距离
- 2.初始化配置g(n) = infinite g(Xs) = 0
- 3.弹出排序第一的节点,放入close list
- 4.找到neighbor,计算cost
- 5.扩展节点,并将上一节点设为父节点
- 6.若已在open list 里,若满足条件则更新g(n)值,更新父节点。
- 7.根据终点回溯找到路径。
参考
- 高飞老师:移动机器人运动规划课程