zoukankan      html  css  js  c++  java
  • 2021.07.05-基于软约束的轨迹优化-理论

    文中ppt来源:深蓝学院,强烈推荐

    重新学习一下软约束轨迹优化的理论知识。

    Distance-based Trajectory Optimization

    Motivation:

    硬约束的可能的不足:

    安全走廊内的区域是等价的,所以轨迹有可能离障碍物很近,控制不好就撞了。

    对于视觉无人机,受限于视觉传感器的范围和质量,如果有噪点,那飞行走廊质量就下降了。

    软约束的不足:

    不能保证每一种约束都满足,而是倾向于满足。如果目标函数设计的不好,是有可能碰撞的。

     问题描述:

    目标函数包括光滑项、碰撞项、动力学项。

    光滑项:根minimum snap中的是一样的。直接用上一节课推导的闭式解。区别在于本解不在限制所有的waypoints固定,而是只有首位固定,也就是dF中很多项都放在了dP中。(这里理解即可,先不推导)

    碰撞惩罚项:沿着轨迹积分,积的轨迹点所在的距离场产生的推力。

    这里就需要ESDF地图,欧式距离场,障碍物内是-1,随着远离障碍物,依次为1,2,3....

    那其实我自己也可以很简单的构建,一圈一圈往外扩就行啦。

    注意:这里是沿着曲线的积分,而不是对时间的积分。如果是对时间的积分,时间变短(速度变快),也可以使得积分结果变小,而我们想要的是因为距离障碍物远而得到的。

    如何积分:

    将ds近似成速度*时间,曲线分成很多段直线段。

    动力学惩罚项:

    对于超过速度和加速度限制的进行惩罚。与碰撞惩罚项类似。

     目标函数求导/Jacobian:

    整个问题,肯定不是凸的,因为首先ESDF距离场就不是凸的,那碰撞惩罚项就不是凸的。

    这里也没有办法转化成凸优化的问题,所以只能通过非线性优化求解:写出目标函数->求导数。

    第一项Js的求导,这个比较简单,对dp求导即可(注意这里的dp跟minimum snap中推导的有些差异,中间的waypoints不在固定,所以都加到了dp中)

    第二项Jc的求导,对c(pt) * ||v(t)||求导。这里μ代表了x,y,z方向。

    先对c(pt)求导,c()这个函数就是自己定义了,根据离障碍物的位置远近,定义一个。

     到现在为止,起码导数都是可以推导出来的,如果推导不出来,就只能数值上加扰动。

    一阶导数是Jacbian,代表梯度。优化的话,一阶导数就可以了。

    二阶导数是海森,代表梯度的梯度。牛顿法的话是二阶导数。

    ESDF地图:

    可以用指数函数作为cost function c(p(t))。当然,简单的话,我觉得可以用一个分段函数。

    动力学项,也可以用指数的函数,超过限制时,爆炸式增长。

     数值优化:

    无约束非线性优化问题,求最小值,也就是求导数为零。

    不是全局最优的,初值敏感。

     利用梯度,往导数的负方向走。

    二阶方法就不是简单的往梯度的下降的方向了,比如牛顿法,是用-一阶导数/二阶导数

     LM方法,结合了一阶和二阶方法,lambda很大时,就是一阶法,lambda很小时,就是二阶法。

    ceres--最小二乘、非线性优化

    NLopt--收录的求解器特别多,作planning经常用。

    写出目标函数,写出梯度,就可以用求解器求解,上边的两个求解器,甚至都不用你写梯度。

    初值选择:

    基于梯度的优化,初始值如何选择。

    方法1.用前端得到的路径,好处是是不碰撞的,但光滑性很差。

    方法2.前端路径,然后用闭式minimum snap求解以后,作为初值。好处是光滑,但是不安全。

    一般来说,我们更愿意初始解是安全的。基于这个初始解,再加上指数爆炸上升的碰撞惩罚函数,可以确保最后轨迹安全。

    优化策略:

    第一次优化规划,只保留Jc碰撞项。使得轨迹离障碍物远一点。

    第二次再把Js和JD加进来。

    缺点:

    碰撞项和动力学项,都需要积分,而且需要离散成很多小段,如果离散的太多细密,对算力复杂度是负担。

    解决方法:B-样条,B-样条和贝塞尔一样,具有凸包性质,就不用积分了,直接限制控制点即可。

    这里的光滑项也是TEB planner使用的。

  • 相关阅读:
    IOS中NSUserDefaults的用法(轻量级本地数据存储)
    ios:Failed to instantiate the default view controller for UIMainStoryboardFile 'Main'
    NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)"
    使用AFNetworking 报错提示
    对比iOS网络组件:AFNetworking VS ASIHTTPRequest(转载)
    iOS
    如何理解语言的跨平台性
    R语言演示功能
    R 字符串处理函数
    来自 Google 的 R 语言编码风格指南
  • 原文地址:https://www.cnblogs.com/gaowensheng/p/14974963.html
Copyright © 2011-2022 走看看