软约束、硬约束、Minimum Snap的轨迹优化方法
文章目录
- 前言
- 约束
- 硬约束的轨迹优化
- Corridor-Based Trajectory Optimization
- Bezier Curve Optimization
- Other Options
- 软约束的轨迹优化
- Distance-Based Trajectory Optimization
- 优化方法
前言
可以看看我的这几篇Blog1,Blog2,Blog3。
上次基于Minimum Snap的轨迹生成,有许多优点,比如:
- 轨迹让机器人可以在某个时间点抵达某个航点。
- 任何一个时刻,都能数学上求出期望的机器人的位置、速度、加速度、导数。
- Minimum Snap可以把问题转换为凸优化问题。
缺点: - Mnimum Snap可以控制轨迹一定经过中间的哪些航点,但是控制不了航点与航点之间生成的这个“OverShoot”,这在控制里面称之为超调,其实在此处不是叫超调,只是借用了一下这个概念,方便理解。也就是Minimum Snap没有考虑障碍物的环境信息。下图中的直观展示就是在直线上方,与红色曲线之间的差值部分,就是OverShoot,因为此时红线已经经过红色障碍物了。
**综上,Minimum Snap轨迹优化方法非常有利于生成生成光滑连续的轨迹的,但是其天然地不利于做避障。**所以,这次的重点就是,如何修改Minimum Snap,使得其可以去做避障。
约束
环境当中的障碍物表示机器人不可通行的区域,其对偶问题就是环境里的可通行的区域。现在想让Minimum Snap不碰到障碍物:
- 加一个推力,使得快靠近障碍物的时候,把机器人推回可通行的区域,参考方法软约束的人工势场法。
- 在可通行的区域中加约束,也可以把轨迹吸引到可通行区域,比如在红色障碍物下面,加上一个绿色的方框,使得机器人走这条路的时候一定通过这个方框,这就是所谓的硬约束。
一个模型,其目标函数为f(x){f}(x)f(x),有很多的约束条件(等式或者不等式),其中硬约束要求这两类的约束条件一定要在全局的条件下满足的。软约束就是把约束条件全部加到目标函数f(x){f}(x)f(x)里,相当于拉格朗日乘子?
这些约束是被倾向于实现的,而不是严格满足的。因为要减少全局,所以使得h(x)和g(x){h}(x)和{g}(x)h(x)和g(x)的值变小,其实一开始的目的是全局最小,没怎么要求h(x)和g(x){h}(x)和{g}(x)h(x)和g(x)的值,所以就是倾向性的。也称λ1∗g(x)+λ2∗h(x){\lambda}_{1}*g(x)+{\lambda}_{2}*h(x)λ1∗g(x)+λ2∗h(x)为损失函数,下面几幅图就是常用的损失函数。
硬约束的轨迹优化
Corridor-Based Trajectory Optimization
把环境中的信息塞入八叉树地图(格子有大有小,不像栅格地图那样规整),之后利用图搜索算法(A*,JPS)进行搜索,就找到了一条飞行走廊,参考图二的蓝色方框,之后由于空余的位置还很多,所以对走廊膨胀,参考黄色的部分,在膨胀过后的飞行走廊生成分段连续的多项式表示的无人机轨迹。12维到4维同样是利用之前的微分平坦性。
与之前不同的是,在Minimum Snap当中,一段段轨迹之间是有WayPoint的(连续性约束,必须要经过定好的WayPoint),现在的WayPoint是存在在前后两个方块的交界处,只需要通过交界处的走廊就行。
如红色的阴影面积。
那么问题来了,如何使一段多项式的轨迹一定位于这个Cube里面?
- 将时间T{T}T进行离散,加约束,使得每一个点都在x,y{x},{y}x,y的边界之内,不过这样就要将T{T}T离散成很多份,会使得这个凸优化问题有非常多约束同时非常难解。
- 采用段与段之间的连接点先施加一个约束,可以保证两端轨迹的中间部分一定经过重叠部分,但没保证不在重叠部分的轨迹不会跑到飞行走廊外面。但是无法直接施加上的,不然很多约束。
采用后验的迭代检测。
与之前的Minimum Snap相比,其连接点是不可以移动的,但是在这里,连接点是可以在方框内自由移动的,因此就算一开始给的时间不是特别好,例如用速度曲线去分配时间,不好的话其迭代检测会自动的去分配时间,进而去优化连接点。
Bezier Curve Optimization
Bezier曲线一定是可以与某个多项式函数有映射的关系的。
以下是B曲线的一些性质。
B曲线总是能通过起始点,并且会终止于最后一个点。
各个性质的应用。
Other Options
来自因特尔实验室的一篇文章,也是前端找Path(RRT Star),在找Path之前会对环境按照方块的大小对障碍物进行膨胀,这个环境膨胀不光是防止碰撞的膨胀,还会把环境进行更多保守的膨胀,之后有了Path会有很多点,在很多点上再继续构造一个个小方块。
以下是利用在无人机编队的轨迹优化。
相当于规划安全距离。
软约束的轨迹优化
Distance-Based Trajectory Optimization
软约束是对机器人产生一个力,使得机器人远离障碍物。最直观的展现方式就是距离描述。
一些硬约束的缺陷如下,对传感器噪点敏感等;软约束就能通过推力而产生一条光滑的轨迹,其优势就是自然的产生光滑的轨迹。软约束也有缺陷,是倾向满足而不是严格满足。
以上推导参考上篇Blog的Minimum Snap推导
ESDF是距离场(参考人工势场法的思想,障碍物较远,惩罚就趋于0;障碍物较近,惩罚呈指数上升。)
优化方法
下降优化方法(容易陷入局部最小值)
线性搜索优化
梯度下降法(同样容易陷入局部最小值)
牛顿方法(不光只看梯度)
Leven法,就是一阶法与二阶法的折中。
软约束、硬约束、Minimum Snap的轨迹优化方法相关推荐
- 6软硬约束下的轨迹优化
Introduction Minimum snap trajectory optimization Minimum snap这种方法只限制轨迹应该会通过的中间路径点(中继点),collision ch ...
- 【附源码和详细的公式推导】Minimum Snap轨迹生成,闭式求解Minimum Snap问题,机器人轨迹优化,多项式轨迹路径生成与优化
该篇博客内容较多,工作量也很大,难免在理解上表达上有错误,如有发现烦请指教.如有问题在博客中留言,或者github的仓库中提Issues都行,看到后我会尽快回复. Minimum Snap源代码:Mi ...
- (四)路径规划算法---QP解决Minimum Snap轨迹优化问题
QP解决Minimum Snap轨迹优化问题 文章目录 QP解决Minimum Snap轨迹优化问题 1. 多项式的次数确定 2. Minimum Snap案例分析 2.1 轨迹的多项式表达 2.2 ...
- 干货 | 足式机器人运动控制发展方向——轨迹优化
" 运动控制技术的进步使得足式机器人的运动能力更强,而近来轨迹优化作为主流学术研究方向,能够为足式机器人运动控制的发展提供可能的指引.本期技术干货,我们邀请到了小米工程师徐喆,向我们介绍足式 ...
- 非自回归也能预训练:基于插入的硬约束生成模型预训练方法
论文标题: POINTER: Constrained Text Generation via Insertion-based Generative Pre-training 论文作者: Yizhe Z ...
- 【约束布局】ConstraintLayout 约束布局 ( 简介 | 引入依赖 | 基本操作 | 垂直定位约束 | 角度定位约束 | 基线约束 )
文章目录 一. ConstraintLayout 简介 1. 引入 约束 布局 ( 1 ) 约束性布局 作用 和 简介 2. 约束 简介 ( 1 ) 约束个数要求 ( 2 ) 约束设置 与 显示位置 ...
- MYSQL:约束?添加约束?删除约束?以及一些其他修饰?
MySQL中的约束,添加约束,删除约束,以及其他的一些修饰: 一.NOT NULL(非空约束) 添加非空约束 1)建表时直接添加 CREATE TABLE t_user(user_id INT(10) ...
- linux命令 - ln - 创建和删除软、硬链接
linux命令 - ln - 创建和删除软.硬链接 在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号.文件属性保存在索引结点里,在访问文件 ...
- 谷歌不支持调用摄像头麦克风_向来只软不硬的谷歌,要对你的手机来狠的
来源:差评 不知道差友们还有没有印象. 前阵子谷歌刚发布首个 Android 11 Developer Preview ( 开发者预览版 )的时候,托尼就充当过一次吃螃蟹的勇士( 其实是手头手机多 ~ ...
- 威联通+nas+mysql_小白玩NAS 篇一:威联通QNAS虚拟机安装软路由+硬路由(无线AP)
小白玩NAS 篇一:威联通QNAS虚拟机安装软路由+硬路由(无线AP) 2019-04-01 20:46:00 86点赞 749收藏 128评论 小编注:此篇文章来自即可瓜分10万金币,周边好礼达标就 ...
最新文章
- 邀您参与 | 阿里巴巴如何扩展 K8s 调度器支持 AI 和大数据任务?
- JS中的间歇(周期)调用setInterval()与超时(延迟)调用setTimeout()相关总结
- 树莓派 python 无人机_DIY一个基于树莓派和Python的无人机视觉跟踪系统
- 2018-2019 20165204 20165216 20165220 实验四 外设驱动程序设计
- 【Flink】Flink如何传递JVM参数给JobManager和TaskManager
- 集设作品灵感|App夜间模式如何设计?
- linux中which命令详解,Linux下which命令使用详解(转)
- 一点对 KL 散度的理解
- linux下mysql的忘记root密码的解决办法
- lisp语言画地物符号_地形图中的地物符号说明汇总
- abb机器人指令手册_ABB机器人加速度设置
- 新手搭建一个网站(详细完整版)
- 基于jquery读取csv
- 全国社会组织信用信息公式平台(试运行)爬虫记录
- 深度:融360还是一家有价值的公司吗?
- halo_回顾:Halo 3与糖尿病抗争
- python 将url 相对地址转绝对地址
- 计算机网络之Dos、DDos攻击
- OSI七层——物理层介绍和安全
- Debian10更换软件源
热门文章
- 【软考系统架构设计师】2019年下系统架构师案例分析历年真题
- python怎么调用类中的函数_类中的python函数调用
- 制作u盘winpe启动盘_U盘PE启动盘制作方法
- Linux 系统中如何恢复已删除的文件?
- WinRAR密码破解(精)
- 中文语音合成软件Ekho(余音)的使用教程
- 盛京剑客系列25:极简估值教程——第一讲速判估值与PEG的推导
- oracle如何判断节假日,oracle function 用于判断是否为节假日
- 助力操作系统国产化:Testin云测试服贸会首发鸿蒙系统测试平台
- 爬虫笔记——urllib实战之淘宝零食板块爬取