EGO-Planner: An ESDF-free Gradient-based Local Planner for Quadrotors(论文学习)

2023-05-16

EGO规划器:一种基于ESDF自由梯度的四转子局部规划器

摘要

ESDF地图被广泛运用在局部地图的梯度方向和大小估计之中,但是由于我们在进行轨迹优化的过程中,只用到了ESDF地图中很小的一部分,这造成了极大的计算冗余。在本文中,我们提出了EGO, 其主要改进是通过比较碰撞轨迹和未碰撞轨迹来建立起惩罚项,并将必要的障碍物信息存储起来。如果整条轨迹不满足动力学可行约束,就分配更多的时间。同时,提出了一种各向异性曲线拟合算法,在保持原轨迹形状的同时调整轨迹的高阶导数。(存疑)
本文的贡献如下:
(1). 提出了一种新颖且具有鲁棒性的基于梯度的无人机局部规划方法,实现了实时的估计和计算梯度信息
(2). 提出了一种有效的轻量化的轨迹优化算法,生成了更加光滑的轨迹。
(3). 将该算法整合进入了无人机系统.

避碰力估算

首先,我们生成一个只满足起始终端点约束的B样条曲线,不管他是否满足碰撞约束,然后,对这条轨迹开始逐片段(B样条曲线一般由多条曲线拼接而成)检查是否满足碰撞检测。对于每一条碰撞片段中的控制点Qi, 我们都将为其分配对应的一些{p, v}对,与此同时也生成一条无碰撞的路径.如下图所示:
在这里插入图片描述

同时,为了避免在一个障碍物的前后两侧都生成{p, v}对, 计算
在这里插入图片描述
我们采用了只要一个控制点满足他的所有合法dij > 0,那这样这个控制点就处在一个新的障碍物中.与此同时,这样的判断操作使得那些只有对最终的轨迹优化有效用的障碍物会被记录,极大的减少了操作时间。
基于ESDF地图的局部规划器由于ESDF地图不全或者错误的信息,导致陷入局部极小值,最终生成不合格的路径,如下图所示:
在这里插入图片描述
而上文提出的方法明确的设计了对对应障碍物的排斥力,且初始化了一个无碰撞路径,因此可以有效处理上述方法的缺陷,同时本文提出的方法不需要对起始点进行无碰撞初始化。

基于梯度的轨迹优化

A. 问题构建

因为我们生成的轨迹是B样条曲线,关于B样条曲线的性质不多赘述,我们可以利用他的凸包特性,确保控制点的凸空间中来保证整条轨迹在凸空间中,我们构造代价函数为:
在这里插入图片描述
Js:轨迹的平滑惩罚
Jc:碰撞惩罚
Jd:可行性惩罚
(1) Js:本文中结合了加速度和加加速度的累计和
在这里插入图片描述
(2) Jc: 当任意控制点的dij < sf(安全距离)时存在,具体如下:
在这里插入图片描述

我们将所有的控制点Qi对应的dij对应的碰撞惩罚累加
在这里插入图片描述
在这里插入图片描述
在本文中,我们直接对Qi进行求导来获得梯度值.
在这里插入图片描述
(3) Jd: 可行性的保证是通过限制高阶微分的轨迹曲线来得到实现的,由于本文的轨迹是B样条,所以可以利用B样条曲线的递归性来实现对高阶微分轨迹的计算。(也就是说,可以通过限制控制点的微分来限制整条曲线).
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

B. 数值优化

我们构建的损失函数方程具有两个特点,一是损失函数总是动态的随着环境的变化而变化,因此需要我们快速的再启动规划器,二是再损失函数中,二次项占了绝大多数,使得整个损失函数具有类二次性质,因此我们可以通过使用海森矩阵的方式加速他的收敛来获得极值,但是获得海森矩阵的逆矩阵需要极大的计算量,因此我们采用似牛顿法来计算。

时间再分配与轨迹优化

在生成避障轨迹时,规划器对最终轨迹的信息一无所知,因此,分配定额时间来进行规划这一方案是不合理的,也不利于保证轨迹的动态可行性,对轨迹中的各段的时间分配问题,我们通过计算对应段中最大的速度,加速度和加加速度和其对应的极限的比值的,对应比例的分配各段的时间。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
而对轨迹的最后优化(好吧这段是真的没看懂)

一些细节

本文采用A方法进行搜索并生成无碰撞路径,使用A的好处是搜索得到的路径会天然的靠近障碍物。对于
在这里插入图片描述
中的Ri向量,其计算公式为:
在这里插入图片描述
Ri是控制点Qi处的切向量,绿色平面是垂直于Ri,pij是绿色平面和障碍物相交得到的障碍物表面点,v是的含义个人理解感觉就是Qi - pij,只不过利用,利用方向的是否相同来获得唯一的{p, v}点对。

结论

本文探讨了梯度规划器使用ESDF地图的必要性并提出了EGO算法,并获得了极好的性能.

个人理解

本文没有使用并构建ESDF地图(前几次读的时候以为只是构建了必要的ESDF地图),首先初始化一条只满足终端约束的B样条曲线和A*算法搜索得到的无碰撞路径图,因为B样条曲线是具有凸包的特性,所以只要保证控制点空间不与障碍物相撞就可以保证整条曲线的安全性,所以计算得到控制点和障碍物的距离信息并保存(dij的虽然是一个平方数,但是他的模值仍然是距离),在保证了唯一性的同时,也保证了信息的准确性。然后就是构建损失函数,因为B样条曲线的递归性,可以利用低阶的B样条曲线满足高阶微分的曲线的需求。梯度值的计算不使用过微分的方式而是通过低阶控制点相减的方式得到的,之后就是对曲线的细节优化部分(好吧这部分没具体看懂)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EGO-Planner: An ESDF-free Gradient-based Local Planner for Quadrotors(论文学习) 的相关文章

  • 用 css 修复渐变背景

    我希望我的页面有一个从上到下流动的渐变背景 我希望背景像固定图像一样 渐变从当前浏览器视口的顶部延伸到底部 并且当您上下滚动页面时看起来相同 换句话说 当您滚动时它不会重复 它保持固定在原位 所以我想要的是这样的 and after scr
  • 圆形 LinearGradient 上的 ContextMenu 在 SwiftUI 中产生锐边

    我有以下观点 struct ContentView View var body some View LinearGradient gradient Gradient colors blue red startPoint topTrailin
  • HTML5 Canvas - alpha 值较低的条带?

    介绍 我目前正在开发一个类似于 MugTug 的小型绘图应用程序画板 http mugtug com sketchpad 不过 有一个非常烦人的问题我还没有解决 绘图算法 我的基本绘制算法与 MugTug 使用的算法类似 基本上它只是在用户
  • 张量流梯度 - 获取所有 nan 值

    我正在使用带有 anaconda 的 python 3 以及带有 eager eval 的tensorflow 1 12 我正在使用它为暹罗网络创建三元组损失函数 并且需要计算不同数据样本之间的距离 我创建了一个函数来创建距离计算 但无论我
  • CSS3中的块状渐变效果

    是否可以使下面的渐变看起来更 块状 这样就不用逐渐从绿色切换到红色 而是按照如下图所示的步骤完成 期望的效果 现在 gradients background image webkit gradient linear left bottom
  • 如何在 scipy.optimize 中使用 fmin_cg 获得正确的尺寸

    我一直在尝试使用 fmin cg 来最小化逻辑回归的成本函数 xopt fmin cg costFn fprime grad x0 initial theta args X y m maxiter 400 disp True full ou
  • 在 free() 后将指针设置为 NULL 总是一个好习惯吗? [复制]

    这个问题在这里已经有答案了 可能的重复 释放后将变量设置为 NULL https stackoverflow com questions 1025589 setting variable to null after free 我正在学习良好
  • 带有渐变的CSS3动画[重复]

    这个问题在这里已经有答案了 难道真的没有办法用 CSS 来制作渐变背景的动画吗 就像是 webkit keyframes pulse 0 background webkit gradient linear left top left bot
  • 使用 free() 时“检测到堆损坏”

    我对 C 还很陌生 这实际上是我第一次使用指针进行作业 我无法弄清楚这个错误 这是我的代码 void str rv char c int i len str ln c char rev char calloc len sizeof char
  • 如何在pytorch中返回中间梯度(对于非叶节点)?

    我的问题是关于 pytorch 的语法register hook x torch tensor 1 requires grad True y x 2 z 2 y x register hook print y register hook p
  • CSS3 是否支持在单个

    我知道你可以在一个背景上制作多个背景 div 在 CSS3 中 但是是否可以混合图像引用背景 即url 具有渐变生成背景 例如 moz linear gradient 如果是这样 语法是什么 如果不是 达到相同结果的最佳实践是什么 Than
  • 如何在其自身事件中释放控件?

    我有一个清单TPanels在 FMX 应用程序中 如果我单击面板 我想释放它 直接在 Onclick 处理程序中释放它们不是正确的方法 因为我遇到了访问冲突 我不想使用windowsmessages 推荐于如何释放其事件处理程序内部的控制权
  • facet_wrap() + ggplot2() 中每个面的独立颜色渐变

    我正在努力为每个方面绘制渐变色标facet wrap 独立 数据太大 无法在这里发布 但这是我的代码 ggplot stack aes hour day geom tile aes fill percent colour white fac
  • 沿着“bresenham”线平滑颜色插值

    我正在尝试沿一条线插值颜色 以便给定两个点及其各自的 RGB 值 我可以绘制一条具有平滑颜色渐变的线 使用布雷森纳姆的线条算法 我现在可以绘制线条 但不确定如何开始在两个端点之间插值颜色 以下是 drawLine 函数的一部分 适用于斜率小
  • 用python计算梯度

    我想知道如何numpy gradient工作 我用梯度来尝试计算群速度 波包的群速度是频率相对于波数的导数 而不是一组速度 我向它提供了一个 3 列数组 前 2 列是 x 和 y 坐标 第三列是该点 x y 的频率 我需要计算梯度 我确实期
  • TensorFlow 中的梯度概念与梯度的数学定义有何关系?

    The TensorFlow 文档 https www tensorflow org api docs python tf gradients解释了 功能 tf gradients ys xs grad ys None name gradi
  • 色带仅适用于 Android 4.0+

    在运行 Android 4 0 或 4 0 3 的模拟器上 我看到可怕的色带 而且似乎无法摆脱 在我测试过的所有其他 Android 版本上 渐变看起来都很平滑 我有一个配置为 RGBX 8888 的 SurfaceView 并且渲染的画布
  • 用渐变色绘制一个 D3 圆

    如何用渐变颜色画一个圆 比如说 从黄色到蓝色的渐变 通常 要创建黄色圆圈 我们可以使用以下代码 var cdata 50 40 var xscale 40 var xspace 50 var yscale 70 var svg d3 sel
  • Android 创建类似 iphone 的渐变

    我需要在我的 Android 应用程序中创建类似黑色 iphone 的渐变 请查看下图中顶部的黑色渐变 怎么做 谢谢 也许是这样的
  • 如何释放字符指针数组?

    我使用此方法将列表中的值转换为数组 以便在 execvp 系统调用中使用 char list2argarray struct shellvalue values int count char array char malloc count

随机推荐