市场常见调度算法的一些理解
RRT
传统的路径规划算法有人工势场法、模糊规则法、遗传算法、神经网络、模拟退火算法、蚁群优化算法等。但这些方法都需要在一个确定的空间内对障碍物进行建模,计算复杂度与机器人自由度呈指数关系,不适合解决多自由度机器人在复杂环境中的规划。
基于快速扩展随机树(RRT / rapidly exploring random tree)的路径规划算法,通过对状态空间中的采样点进行碰撞检测,避免了对空间的建模,能够有效地解决高维空间和复杂约束的路径规划问题。该方法的特点是能够快速有效地搜索高维空间,通过状态空间的随机采样点,把搜索导向空白区域,从而寻找到一条从起始点到目标点的规划路径,适合解决多自由度机器人在复杂环境下和动态环境中的路径规划。与PRM类似,该方法是概率完备且不最优的。
RRT算法也有一些缺点,它是一种纯粹的随机搜索算法对环境类型不敏感,当C-空间中包含大量障碍物或狭窄通道约束时,算法的收敛速度慢,效率会大幅下降
DWA (局部避障的动态窗口算法)
(Dynamic Window Approach),ROS中使用了DWA算法获得了很好的局部路径规划的效果 . 其大概思路是,机器人在获得目的信息后先规划出一条大概的路线,然后调用局部路径规划器,根据这条路线及costmap的信息,规划出机器人在局部是做出具体的策略。
其原理是在(v, w)速度在空间中 采样多种速度,并模拟这些速度在一定时间内的运动轨迹,再通过一个评价函数对这些轨迹打分,最优的速度被选出来后发给下位机。
[视频示例] http://v.youku.com/v_show/id_XMTg2NzY4MjY5Ng==.html
A*(念做:A Star)
是一种很常用的路径查找和图形遍历算法,1968年斯坦福大学搞出来的,被认为是Dijkstar算法的一种扩展
Dijkstra算法用来寻找图形中节点之间的最短路径。
考虑这样一种场景,在一些情况下,图形中相邻节点之间的移动代价并不相等。例如,游戏中的一幅图,既有平地也有山脉,那么游戏中的角色在平地和山脉中移动的速度通常是不相等的。
A*算法通过下面这个函数来计算每个节点的优先级。
其中:
-
f(n)是节点n的综合优先级。当我们选择下一个要遍历的节点时,我们总会选取综合优先级最高(值最小)的节点。
-
g(n) 是节点n距离起点的代价。
-
h(n)是节点n距离终点的预计代价,这也就是A*算法的启发函数。关于启发函数我们在下面详细讲解。
A*算法在运算过程中,每次从优先队列中选取f(n)值最小(优先级最高)的节点作为下一个待遍历的节点。
另外,A*算法使用两个集合来表示待遍历的节点,与已经遍历过的节点,这通常称之为open_set
和close_set
。
它有很多变种算法
-
ARA(anytime repairing A) 也称为 Anytime A*
-
D(dynamic A) 与A*不同的是,其具体代价在运行过程中可能发生变化
-
Field D*
Field D扩展了D和D* Lite,是一种基于插值( interpolation-based )的规划算法,它使用线性插值来有效地生成低成本路径,从而消除不必要的转向。
在给定线性插值假设的情况下,路径是最优的,并且在实践中非常有效。该算法目前被各种现场机器人系统使用。
参考
[参考链接] <https://segmentfault.com/a/1190000017839112>
不用的应用场景对 T(n) = O(f(n)) 考虑程度不同,以上算法均能规划出准确的路径,根据场合和需要选择相应的算法。
以上算法皆仅仅是在理论和软件的基础上讨论,再往下一层就要谈到硬件,说到硬件不得不提的就是SLAM技术了
SLAM是“Simultaneous Localization And Mapping”的缩写,可译为同步定位与建图
这里包含的东西就多了 本身就包含前后端,里面又包含好几个块 一个是数学,一个是编程。入门比较困难。