主页 > 机器人 > 机器人路径规划?

机器人路径规划?

栏目: 作者: 时间:

一、机器人路径规划?

Online Generation of Safe Trajectories for Quadrotor UAV Flight in Cluttered Environments

介绍

文章强调无人机轨迹规划重点有三:

  1. 生成的轨迹必须平滑且符合无人机的动力学约束
  2. 整个轨迹,而不是轨迹上的某些点,需要保证是避障的
  3. 整个sensing, mapping, planning的过程必须是满足实时性要求的

文章的主要贡献在于使用minimum snap方法,通过构造带约束的优化问题保证无人机轨迹的动力学约束和平滑。通过使用高效的空间处理方法(基于八叉树地图)来生成飞行走廊,从而处理了无人机可通行区域的问题。并且这个方法是高效的,所以能够实时运行,地图也是在无人机飞行中逐步构建的。下图是最后的算法效果:能够在室外位置环境下进行自主导航和飞行。右侧图的绿色方框就是后面要讲的飞行走廊。

对于飞行走廊,1.2.1节介绍了已有的很多方案,但是都存在计算负荷过大的问题,作者提出了膨胀法形成多个长方体连接而成飞行走廊的思路。对比作者以前提出的方法(文章ref[12]),以及当时的state-of-the-art方案(文章ref[4]),都存在明显的优势。

如上图所示,蓝色的连续方框,是作者在ref[12]中提出的早些方案,明显飞行走廊的空间构造的更加保守,当前方法构造出的橘色方框空间更大,也就意味着飞机有更大的操作空间。而对比ref[4]的方法,也具有明显优势。[4]中,使用了先用RRT*采样出离散点,如图(c)所示,然后用QP的方法将这些点连接成光滑可行的曲线。由于优化问题只存在等式约束,也就是要曲线通过这些个提前固定好的点,所以可以使用闭式求解

的方法,一次性求解结果。这个在论文推土机:Minimum Snap Trajectory Generation and Control for Quadrotors以及提过了,但是很容易想到的问题就是,平滑后的曲线的点,除了通过这些固定点的地方保证安全,其他的位置是有可能存在碰撞风险的。

作者的做法是:做碰撞检测,发现碰撞点后新增加约束点,然后回来继续解优化问题,和上一个优化问题相比,会发生碰撞的位置由于增加了新的位置约束,则不会再发生碰撞了,但是这次优化问题由于约束发生了变化,不保证在别的地方是不是会再发生碰撞,所以有可能又会检测出新的碰撞点,所以需要一次一次不断进行迭代优化,最后到任何点都不发生碰撞为止,可是到底要进行多少次迭代才能够完成优化呢?这里要强调,我们无法证明通过有限次优化能够让所有点避障。这个部分的深入分析我们放到对ref[4]的解析中再讲,完成本文时还没写。最后文章给出算法框架:

基于八叉树的地图表示

这部分涉及地图,或许应该放在另一个专栏中?

飞行走廊的生成

这部分介绍飞行走廊的生成。飞行走廊的好处很明显:空间上的约束,可以直接去构建,但问题可能是非凸的,或者构造出非线性优化问题,这会影响计算的实时性。通过构建飞行走廊,将位置约束变成凸空间,这样施加在优化问题上,优化问题仍然是凸优化,能够通过高效的求解方法进行求解。 飞行走廊被定义成 ,它由一系列的空间组成 ,每个空间是一个长方体,所以空间有三个维度,每个维度被其上下界所约束: .飞行走廊的生成有两部分组成,首先进行初始化,然后进行后处理。

第一步,使用A*算法进行初始化(当然,完全可以使用考虑动力学约束的混合A*搜索算法)。空间地图使用八叉树地图进行构造,使用A*算法进行搜索,找到连接起点和终点的一系列grids. 这些grid是避障的,联通的。在3.1.3节,作者强调了最优性和效率之间的平衡。由于空间的稀疏性,再使用A*搜索过程中我们通过减小heuristic的估计来让A*算法更加贪心,但由于破坏了最优性原则,这很可能让A*算法搜索出来的结果不是全局最优,就如下图中的绿色方块所示。但是由于在第二步膨胀过程中,我们会膨胀绿色方块获得最优的飞行走廊,这也在一定程度上弥补了A*搜索结果不是全局最优的问题。因为与全局最优结果相近的次优搜索结果,通过第二步膨胀后,或许会几乎相同。

接下来第二步是膨胀:由上面A*搜索出来的结果作为初始化飞行走廊显然还没有完全利用到周围的free space

, 在这个飞行走廊附近依旧有很大的拓展空间,通过向各个方向进行膨胀,一直膨胀到碰到障碍物位置,以此获得更大的通行区域,如下如所示,蓝色方块是初始化的结果,绿色虚线方块是膨胀后的结果,右图中的橘色区域则是连续膨胀方块间的重叠区域,这也是接下来轨迹规划

的时候的空间位置约束,要求两个segments之间的切换点的位置必须被约束在这个重叠区域之内。

在Fig.1.2中也就是下图,我们可以明显的看到,重叠区域是非常大的,在进行轨迹规划时,我们只要求segment

之间的切换点被约束在重叠区域内即可,这其实是implicit time adjustment. 因为通过调节切换点的位置,也就起到了调节轨迹长度和轨迹形状的作用,从一定角度来讲就是在做time adjustment

的过程。原文的描述在3.2和3.3中。

这里是截图原文的描述:

基于样条曲线的轨迹生成

这部分介绍轨迹规划。这部分的轨迹生成

算法在ref[12]中首次提出(完成本文时对应论文解析还未完成,后续链接),在这里面针对时间分配问题有一些新思路,通过增加有限个新约束(在违反无人机动力学约束发生时),能够被证明整个曲线可以被完成约束在设定的动力学约束之内。这部分也是文章的核心部分,可以看下原文chapter4的截图:

我们跳过无人机的动力学分析,直接接受结论:四旋翼无人机具备微分平坦的特性,具体说来就是其状态和控制的输入能够被四个输出及其导数确定。这是我们能够运用基于minimum snap方法的前提条件。多段拼接的轨迹由以下表达式组成:

cost function为:

以上表达意为整条曲线又M 段 N阶多项式拼接而成,目标函数是整条曲线的某阶导数(minimum snap取jerk, 也就是3阶导数)。在这里,目标函数被构造成二次型:

其中,等式约束和不等式约束均可被写成线性函数。具体来说,约束包括动力学约束(速度,加速度,jerk等),位置约束,通过corridor constraints给出,也就是上面说到的飞行走廊,最后还有连续性约束,也就是连续两条曲线的切换点至少N-1阶连续,N是每条曲线的最高次。对于位置约束,上面已经说过,切换点的位置被约束在对应的方块的重叠区域之内:

但是,注意到这个约束只是保证了切换点的安全,并没保证其他时间点上的点是不是安全的,避免碰撞的。所以这里作者给出了一个新算法来保证整条曲线都是避障的,如下图所示:

  1. 首先进行一次优化求解,然后得出结果。
  2. 对每一段N阶曲线去查看它的N-1的极值点,来检查是不是在对应的飞行走廊的方块内。
  3. 如果出现violation,违反约束的情况,在那个违反约束的时间点上,新增位置约束,具体做法就是对这个位置的上下边界压缩
  4. 然后构造出新的优化问题继续求解,这里新的问题与老的优化问题的唯一区别是更新了约束。

新的约束为:

注意到,尽管这个loop内的极值点不一定是下一个loop的极值点,但是作者通过证明发现能够通过有限次的约束更新,将整条曲线限制在安全区域之内,这个和ref[4]中的处理碰撞问题的方法相比就有很大优势,毕竟后者是内有办法确保迭代能够在有限次约束更新内完成的。具体的theory部分见文章4.2.1节(Page.25).

进一步的,如果需要约束更高阶的导数,如速度,加速度,以及jerk等,也可以通过同样的方法进行约束,比如说还想约束速度,那么获得速度表达式后:速度的表达式是N-1阶,那么就有N-2个极值点,找到极值点是否符合动力学约束,如果不符合,用一样的方式,在极值点处施加新的约束,然后继续回去进行下一轮优化。

二、祖母方格的所有花样?

第一圈:环起3个锁针当起立针(也算做一针长针),再钩一个锁针以上步骤再钩7组,再起,‼️第一圈共8个长针,8个锁针,引拔