一文洞悉Python必备50种算法!资深大牛至少得掌握25种!
一、环境需求
二、怎样使用
三、本地化
3.1扩展卡尔曼滤波本地化
3.2无损卡尔曼滤波本地化
3.3粒子滤波本地化
3.4直方图滤波本地化
四、映射
4.1高斯网格映射
4.2光线投射网格映射
4.3k均值物体聚类
4.4圆形拟合物体形状识别
五、SLAM
5.1迭代最近点匹配
5.2EKF SLAM
5.3FastSLAM 1.0
5.4FastSLAM 2.0
5.5基于图的SLAM
六、路径规划
6.1动态窗口方式
6.2基于网格的搜索
迪杰斯特拉算法
A*算法
势场算法
6.3模型预测路径生成
路径优化示例
查找表生成示例
6.4状态晶格规划
均匀极性采样(Uniform polar sampling)
偏差极性采样(Biased polar sampling)
路线采样(Lane sampling)
6.5随机路径图(PRM)规划
6.6Voronoi路径图规划
6.7快速搜索随机树(RRT)
基本RRT
RRT*
基于Dubins路径的RRT
基于Dubins路径的RRT*
基于reeds-shepp路径的RRT*
Informed RRT*
批量Informed RRT*
闭合回路RRT*
LQR-RRT*
6.8三次样条规划
6.9B样条规划
6.10Eta^3样条路径规划
6.11贝济埃路径规划
6.12五次多项式规划
6.13Dubins路径规划
6.14Reeds Shepp路径规划
6.15基于LQR的路径规划
6.16Frenet Frame中的最优路径
七、路径跟踪
7.1姿势控制跟踪
7.2纯追迹跟踪
7.3史坦利控制
7.4后轮反馈控制
7.5线性二次regulator(LQR)转向控制
7.6线性二次regulator(LQR)转向和速度控制
7.7模型预测速度和转向控制
八、项目支持
一、环境需求
Python 3.6.x
numpy
scipy
matplotlib
pandas
cvxpy 0.4.x
二、怎样使用
安装必要的库;
克隆本代码仓库;
执行每个目录下的python脚本;
如果你喜欢,则收藏本代码库:)
三、本地化
3.1 扩展卡尔曼滤波本地化
私信小编001 获取源文件以及PDF!
该算法利用扩展卡尔曼滤波器(Extended Kalman Filter, EKF)实现传感器混合本地化。
蓝线为真实路径,黑线为导航推测路径(dead reckoning trajectory),绿点为位置观测(如GPS),红线为EKF估算的路径。
红色椭圆为EKF估算的协方差。
相关阅读:
概率机器人学
http://www.probabilistic-robotics.org/
3.2 无损卡尔曼滤波本地化
该算法利用无损卡尔曼滤波器(Unscented Kalman Filter, UKF)实现传感器混合本地化。
线和点的含义与EKF模拟的例子相同。
相关阅读:
利用无差别训练过的无损卡尔曼滤波进行机器人移动本地化
https://www.researchgate.net/publication/267963417_Discriminatively_Trained_Unscented_Kalman_Filter_for_Mobile_Robot_Localization
3.3 粒子滤波本地化
该算法利用粒子滤波器(Particle Filter, PF)实现传感器混合本地化。
蓝线为真实路径,黑线为导航推测路径(dead reckoning trajectory),绿点为位置观测(如GPS),红线为PF估算的路径。
该算法假设机器人能够测量与地标(RFID)之间的距离。
PF本地化会用到该测量结果。
相关阅读:
概率机器人学
http://www.probabilistic-robotics.org/
3.4 直方图滤波本地化
该算法是利用直方图滤波器(Histogram filter)实现二维本地化的例子。
红十字是实际位置,黑点是RFID的位置。
蓝色格子是直方图滤波器的概率位置。
在该模拟中,x,y是未知数,yaw已知。
滤波器整合了速度输入和从RFID获得距离观测数据进行本地化。
不需要初始位置。
相关阅读:
概率机器人学
http://www.probabilistic-robotics.org/
四、映射
4.1 高斯网格映射
本算法是二维高斯网格映射(Gaussian grid mapping)的例子。
4.2 光线投射网格映射
本算法是二维光线投射网格映射(Ray casting grid map)的例子。
4.3 k均值物体聚类
本算法是使用k均值算法进行二维物体聚类的例子。
4.4 圆形拟合物体形状识别
本算法是使用圆形拟合进行物体形状识别的例子。
蓝圈是实际的物体形状。
红叉是通过距离传感器观测到的点。
红圈是使用圆形拟合估计的物体形状。
五、SLAM
同时本地化和映射(Simultaneous Localization and Mapping,SLAM)的例子。
5.1 迭代最近点匹配
本算法是使用单值解构进行二维迭代最近点(Iterative Closest Point,ICP)匹配的例子。
它能计算从一些点到另一些点的旋转矩阵和平移矩阵。相关阅读:
机器人运动介绍:迭代最近点算法
https://cs.gmu.edu/~kosecka/cs685/cs685-icp.pdf
5.2 EKF SLAM
这是基于扩展卡尔曼滤波的SLAM示例。
蓝线是真实路径,黑线是导航推测路径,红线是EKF SLAM估计的路径。
绿叉是估计的地标。
相关阅读:
概率机器人学
http://www.probabilistic-robotics.org/
5.3 FastSLAM 1.0
这是用FastSLAM 1.0进行基于特征的SLAM的示例。
蓝线是实际路径,黑线是导航推测,红线是FastSLAM的推测路径。
红点是FastSLAM中的粒子。
黑点是地标,蓝叉是FastLSAM估算的地标位置。
相关阅读:
概率机器人学
http://www.probabilistic-robotics.org/
5.4 FastSLAM 2.0
这是用FastSLAM 2.0进行基于特征的SLAM的示例。
动画的含义与FastSLAM 1.0的情况相同。
相关阅读:
概率机器人学
http://www.probabilistic-robotics.org/
Tim Bailey的SLAM模拟
http://www-personal.acfr.usyd.edu.au/tbailey/software/slam_simulations.htm
5.5 基于图的SLAM
这是基于图的SLAM的示例。
蓝线是实际路径。
黑线是导航推测路径。
红线是基于图的SLAM估算的路径。
黑星是地标,用于生成图的边。
相关阅读:
基于图的SLAM入门
http://www2.informatik.uni-freiburg.de/~stachnis/pdf/grisetti10titsmag.pdf
六、路径规划
6.1 动态窗口方式
这是使用动态窗口方式(Dynamic Window Approach)进行二维导航的示例代码。
相关阅读:
用动态窗口方式避免碰撞
https://www.ri.cmu.edu/pub_files/pub1/fox_dieter_1997_1/fox_dieter_1997_1.pdf
6.2 基于网格的搜索
迪杰斯特拉算法
这是利用迪杰斯特拉(Dijkstra)算法实现的基于二维网格的最短路径规划。
动画中青色点为搜索过的节点。
A*算法
下面是使用A星算法进行基于二维网格的最短路径规划。
动画中青色点为搜索过的节点。
启发算法为二维欧几里得距离。
势场算法
下面是使用势场算法进行基于二维网格的路径规划。
动画中蓝色的热区图显示了每个格子的势能。
一文洞悉Python必备50种算法!资深大牛至少得掌握25种!的更多相关文章
- 算法入门:最大子序列和的四种算法(Java)
最近再学习算法和数据结构,推荐一本书:Data structures and Algorithm analysis in Java 3rd 以下的四种算法出自本书 四种最大子序列和的算法: 问题描述 ...
- c语言求回文数的三种算法的描述
c语言求回文数的三种算法的描述 题目描述 注意:(这些回文数都没有前导0) 1位的回文数有0,1,2,3,4,5,6,7,8,9 共10个: 2位的回文数有11,22,33,44,55,66,77,8 ...
- python数据分析与挖掘实战————银行分控模型(几种算法模型的比较)
一.神经网络算法: 1 import pandas as pd 2 from keras.models import Sequential 3 from keras.layers.core impor ...
- Python 必备面试基础知识-3
今天继续分享 Python 相关的面试题,你准备好了嘛! 网络编程篇 1. 简述 OSI 七层协议 是网络传输协议,人为的把网络传输的不同阶段划分成不同的层次. 七层划分为:应用层.表示层.会话层.传 ...
- Python实现各种排序算法的代码示例总结
Python实现各种排序算法的代码示例总结 作者:Donald Knuth 字体:[增加 减小] 类型:转载 时间:2015-12-11我要评论 这篇文章主要介绍了Python实现各种排序算法的代码示 ...
- LVS三种工作方式八种算法
一.集群简介 什么是集群 计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台计算机.集群系统中的单个计算 ...
- 30个深度学习库:按Python、C++、Java、JavaScript、R等10种语言分类
30个深度学习库:按Python.C++.Java.JavaScript.R等10种语言分类 包括 Python.C++.Java.JavaScript.R.Haskell等在内的一系列编程语言的深度 ...
- Python实现常用排序算法
Python实现常用排序算法 冒泡排序 思路: 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完 ...
- 《用Python解决数据结构与算法问题》在线阅读
源于经典 数据结构作为计算机从业人员的必备基础,Java, c 之类的语言有很多这方面的书籍,Python 相对较少, 其中比较著名的一本 problem-solving-with-algorithm ...
随机推荐
- Spring @EventListener 异步中使用condition的问题
@EventListener是spring在4.2+推出的更好的使用spring事件架构的方式,并且异步方式也很好设定 但是在spring4.2.7版本上使用eventlistener的conditi ...
- ArcMap图层属性表中添加图片
一看标题是不是有点懵?懵就对了!刚接触到的时候我也有点懵,属性表不是都是文本啊数字啊之类的格式,怎么还可以存图片,下面就带大家来看看吧! 一.关于图层入库问题 图层进入数据库和图层以shp格式存储时, ...
- vs code 操作Git
首次从Git拉取项目:Ctrl+Shift+p 选择Git 克隆 拉取成功后 Ctrl+波浪号进入控制台选择终端 使用npm install下载依赖 到此就从Git拉取成功了: 如果提示npm错误,有 ...
- VS Code引用 vue/cli
npm i @vue/cli -g 引用cli脚手架 3.0版本 下载好后 找个空文件夹 vue create myvue 创建vue项目 myvue是自己项目名称 Your connec ...
- .NET数据采集
public string GetHttpData(string Url) { string sException = null; string sRslt = null; WebResponse o ...
- javaee设计模型简介
(一)五种模式 1.单例模式 在某些情况下,有些对象只需要一个就可以了,即每个类只需要一个实例.例如,一台计算机上的可以连接多台打印机,但是该计算机上的打印程序只能有一个,这里就可以通过单例模式来避免 ...
- Python之PIL库的运用、GIF处理
一.PIL库简介 PIL(Python Image Library)库是Python语言的第三方库,它支持图像存储.显示和处理,它能够处理几乎所有图片格式,可以完成对图像的缩放.剪裁.折叠以及像图片添 ...
- Linux下搭建测试环境
一. 安装虚拟机 1.选择linux 型号 3.0x 64的版本 2.磁盘分区 /目录, home目录 ,boot,var ,设置root密码 3.安装(过程略) 二. 配置虚拟机网卡 路径:cd / ...
- [C]排序并插入
/* 编写程序,在主函数中定义一个有10个元素的整型一维数组,用户输入9个数据,调用函数,对数组元素进行从小到大排序后,在函数中输入一个数,插入到数组中正确的位置,并输出. */ #include&l ...
- 08机器学习实战之BP神经网络
1. 背景: 1.1 以人脑中的神经网络为启发,历史上出现过很多不同版本 1.2 最著名的算法是1980年的 backpropagation 2. 多层向前神经网络(Multil ...