新路径规划算法
一、 概述
此次仍然使用A*算法进行路径规划,通过K210进行实时路径规划,所以本次将路径规划算法使用python进行面向对象开发,因为使用python数字计算更加方便,考虑使用人工势场法进行动态路径规划,初期先使用A*进行循环的静态规划。
中心思想与之前的C++版本一样,仍通过对启发值(描述当前点到终点距离的预估代价和当前代价)的运用。
OpenList和CloseList表示已探索区域边界和已探索区域,从OpenList中寻找下一个探索的点,探索完毕保存到CloseList。当终点在CloseList中被保存,则路径已经被找到,通过对CloseList进行回溯找到路径,注意找不到路径的结束条件。
二、 实现
1. 核心层:负责通过k210摄像头获取的图像获得地图进行地图的更新和绘制、加载和保存,以及小车/无人机移动导致的起点变化或状态更新。
2. 算法层:复制A*+人工势场算法的实现
1. 核心层
(1) 地图:
1) 目前进行二维的路径规划,所以利用一个二维数组表示地图(无人机开发后续需要调整维度)。
2) 为了方便地图加载,选择将二维数组保存为csv文件序列化到磁盘上,加载地图再从磁盘上反序列化csv文件到内存从而读取地图。
3) 设置障碍物,针对地图中不同状态的区域使用不同的数值表示当前区域状态。
4) 使用光栅图(基本构成单位为像素)绘制地图(python中的Matplotlib、Seaborn、Plotly这类光栅图绘图库)
(2) 地图动态加载:
地图的绘制加载非常消耗资源,大大减少算法速度,所以进行地图记录,只对变化的节点进行绘制。
2. 算法实现层
负责实现A*算法,实现算法层和核心层耦合,二维地图状态由核心层提供,在算法实现层只需要调用核心层提供的接口进行地图状态修改就可以。
三、 代码实现
算法由构建的Astar类完成,将启发值的计算以静态方法嵌入到类中