(原标题:终于懂了:导航软件原来是这么工作的)
不管你是开车还是步行,现如今导航是越来越重要了。那么,导航软件到底是如何工作的?来看看中国科技网的解析吧。
路径规划无论在民用还是军用领域都应用广泛,汽车行驶需要路径规划,导弹、无人机等飞行器也需要进行航路(或航迹)规划,它们的底层算法是相通的,只不过汽车路径规划相对简单只需要在二维平面进行,而且对规划环境以及反应速度等方面的要求没有飞行器那么高。本质上说,底层算法包括两大类。
第一种是数值优化算法。它在起点和终点之间布设一系列路径点,使用坐标值表述路径点位置,让汽车沿着这些点行驶。在选择路径点时,就需要定义目标函数,例如路径长度最短。规划过程中还需考虑一些约束条件,比如对咱们日常驾驶的汽车来说,必须要求路径点都位于已有道路上。然后,借鉴一些现代数值优化算法(比如粒子群算法,它是模拟鸟群、鱼群捕食过程的全局搜索算法),不断地对可能布设路径点的区域进行探索,最终确定使得目标函数最优(如路径长度最低)的路径点。
但总体来说,如果路径点规模较大时,使用数值优化算法求解路径规划时,问题的维度将急剧增加,导致规划过程所需时间较长,难以满足导航软件的时效性要求。如今非常具有实用性的是第二种算法——启发式算法。
第二种是启发式算法,以我们导航上常用的“A*算法”“Dijikstra算法”等为代表,它从起始点开始,以一定的步长为单位,进行节点扩展。选取代价值(如路径长度)最小的节点作为扩展节点,扩展过程中需要考虑一些约束,比如转弯半径的限制以及对风险障碍的规避等等,这就使扩展角度不可能总是全方位的。如此一步步扩展,直到当某个扩展节点到达目标终点时,再从终点倒过来回溯到起点,这样,把过程中的各个节点串起来,就成为了一条规划的路径。