规划算法
文章平均质量分 92
mhrobot
这个作者很懒,什么都没留下…
展开
-
Dijkstra规划算法原理及C++实现
1. 算法原理参考此篇足矣:Dijkstra算法图文详解2. C++ 实现问题描述:有四个节点( 0,1, 2, 3),已知 0和1之间的距离为3米, 1和2之间的距离为4米,2和3之间的距离为2米, 0和3之间的距离为5米。求:1 --> 3的最短距离是多少?思路:采用邻接矩阵法,通过二维vector保存相邻节点的距离,其中:自节点距离为0,不相连节点的距离初始化为一个很大的值INFvector<vector<int>> global_map = {原创 2020-12-11 11:59:22 · 296 阅读 · 0 评论 -
轨迹规划-二次规划QP
1. 二次规划的由来在1940年左右(1939年 Leonid Kantorovich 总结发表了线性规划), 线性规划LP被提出来, 10年后, QP作为Non-Linear Programming, NLP被总结发表。顾名思义, 二次规划就是把一次规划(线性规划, LP)的目标公式扩展到二次函数:这里 Q 是对称矩阵(Symmetric Matrix)那么这样修改目标之后, 会带来什么改变?首先从图上来看, 最大的变化就是二次带来等高线( contour line )不再是直线, 这样使得最原创 2020-12-01 11:49:21 · 6125 阅读 · 1 评论 -
轨迹规划-动态规划DP和最短路径问题
1.简介动态规划Dynamic Programming: 这里的“Programming”并非指编写程序代码,而是指一种表格计算法(A tabular method),即基于表格查询的方法计算得到最优结果。动态规划与分治法(The Divide-and-Conquer Method)有些类似,也是将问题分解为多个子问题,并且基于子问题的结果获得最终解。二者的区别是,分治法将初始问题划分为多个不关联(Disjoint)的子问题(Subproblem)(即子问题相互之间互不依赖),递归地解决子问题,然后将子原创 2020-11-30 18:37:14 · 4686 阅读 · 0 评论 -
轨迹规划-三次样条函数插值
1. 原理及公式推导参考此篇足矣:三次样条函数插值(Cubic spline function interpolation)2. 代码实现import mathimport numpy as npimport bisectclass Spline: """ Cubic Spline class """ def __init__(self, x, y): self.b, self.c, self.d, self.w = [], [], [],原创 2020-11-24 19:06:50 · 1708 阅读 · 0 评论 -
轨迹规划-贝塞尔曲线
1. 简介贝塞尔曲线于 1962 年,由法国工程师皮埃尔·贝济埃(Pierre Bézier)所广泛发表,他运用贝塞尔曲线来为汽车的主体进行设计,贝塞尔曲线最初由保尔·德·卡斯特里奥于1959年运用德卡斯特里奥算法开发,以稳定数值的方法求出贝塞尔曲线.贝塞尔曲线有着很多特殊的性质, 在图形设计和路径规划中应用都非常广泛, 贝塞尔曲线完全由其控制点决定其形状, n个控制点对应着n-1阶的贝塞尔曲线,并且可以通过递归的方式来绘制.先感受一下贝塞尔曲线:贝塞尔曲线2. 公式及原理一阶贝塞尔曲线中原创 2020-11-24 10:08:48 · 10810 阅读 · 3 评论 -
轨迹规划——五次多项式曲线拟合
1.五次多项式求解为了获得一个加速度连续的轨迹,位置和速度需要合适的初始和终止条件,也需要合适的初始和终止加速度值。这样共有六个边界条件,因此需要采用五次多项式:函数关系式为:注意:v(t)公式错误,系数c1后面没有t已知起点(x0, v0, a0), 终点(x1, v1, a1),两点之间,一段轨迹规划的起始时间是t0,结束时间是t1。一般情况下,起点时刻默认为t0 = 0 ,根据五次多项式及其一阶和二阶导,可求得系数:c0, c1,c2将求得的c0, c1,c2再带回原式及其一阶和二原创 2020-11-23 21:45:20 · 20463 阅读 · 0 评论 -
基本排序算法及其python实现
1.排序算法分类2. 算法的复杂度排序算法在程序猿的编程生涯中虽然用的不多,但是作为基本功,还是要掌握一下。排序算法是「数据结构与算法」中最基本的算法,它分为「内部排序」和「外部排序」;「内部排序」(In-place: )一般在内存中实现;当数据量很大时,内存有限,不能将所有的数据都放到内存中来,这个时候必须使用「外部排序」(Out-place)。3.算法原理及其python实现3.1 冒泡排序(Bubble Sort)冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素原创 2020-05-27 11:03:54 · 216 阅读 · 0 评论 -
分离轴定理SAT及碰撞检测
1.简介分离轴理论,简称SAT(SeparatingAxisTheorem),通过判断任意两个凸多边形在任意角度下的投影是否均存在重叠,来判断是否发生碰撞。即两个不相交的多边形一定能找到一条轴,它们在这条轴上的投影不相交,可以理解为存在一个角度用电筒照这两个不相交多边形得到不相交的投影。此理论可以用于找到最小的渗透向量,此向量在物理模拟和其他很多应用中很有用。注意:分离轴定理只适合凸多边形,所以如果是凹多边形的话需要转换成多个凸多边形。可以参考:二维多边形分解为凸块的库2.分类二维平面上常用的有三种原创 2020-05-21 20:35:58 · 3913 阅读 · 1 评论 -
基于采样的快速探索随机树RRT及其改进方法
1.简介RRT是Steven M. LaValle和James J. Kuffner Jr.提出的一种通过随机构建Space Filling Tree实现对非凸高维空间快速搜索的算法。该算法可以很容易的处理包含障碍物和差分运动约束的场景,因而广泛的被应用在各种机器人的运动规划场景中。RRT算法的优势在于无需对系统进行建模,无需对搜索区域进行几何划分,在搜索空间的覆盖率高,搜索的范围广,可以尽可能的探索未知区域。但同时也存在算法计算代价过大的问题。研究者们提出RRT的多种改进形式来解决这类问题。比如Goal原创 2020-05-15 17:41:17 · 6382 阅读 · 0 评论 -
D*规划算法及python实现
1、简介“D*算法”的名称源自 Dynamic A Star,最初由Anthony Stentz于“Optimal and Efficient Path Planning for Partially-Known Environments”中介绍。它是一种启发式的路径搜索算法,适合面对周围环境未知或者周围环境存在动态变化的场景。2、算法介绍同A算法类似,D-star通过一个维护一个优先队列(OpenList)来对场景中的路径节点进行搜索,所不同的是,D不是由起始点开始搜索,而是以目标点为起始,通过将目标原创 2020-05-13 21:30:33 · 9779 阅读 · 3 评论