导读:本文包含机器人算法、自动导航算法的Python代码合集。其主要特点有以下三点:选择了在实践中广泛应用的算法;依赖最少、容易阅读,容易理解每个算法的基本思想。希望阅读本文后能对你有所帮助。文章来源:图灵人工智能。

引  文

环境需求怎样使用本地化

  • 扩展卡尔曼滤波本地化
  • 无损卡尔曼滤波本地化
  • 粒子滤波本地化
  • 直方图滤波本地化

映射

  • 高斯网格映射
  • 光线投射网格映射
  • k均值物体聚类
  • 圆形拟合物体形状识别

SLAM

  • 迭代最近点匹配
  • EKF SLAM
  • FastSLAM 1.0
  • FastSLAM 2.0
  • 基于图的SLAM

路径规划

  • 动态窗口方式
  • 基于网格的搜索
  • 迪杰斯特拉算法
  • A*算法
  • 势场算法
  • 模型预测路径生成
  • 路径优化示例
  • 查找表生成示例
  • 状态晶格规划
  • 均匀极性采样(Uniform polar sampling)
  • 偏差极性采样(Biased polar sampling)
  • 路线采样(Lane sampling)
  • 随机路径图(PRM)规划
  • Voronoi路径图规划
  • 快速搜索随机树(RRT)
  • 基本RRT
  • RRT*
  • 基于Dubins路径的RRT
  • 基于Dubins路径的RRT*
  • 基于reeds-shepp路径的RRT*
  • Informed RRT*
  • 批量Informed RRT*
  • 三次样条规划
  • B样条规划
  • 贝济埃路径规划
  • 五次多项式规划
  • Dubins路径规划
  • Reeds Shepp路径规划
  • 基于LQR的路径规划
  • Frenet Frame中的最优路径

路径跟踪

  • 纯追迹跟踪
  • 史坦利控制
  • 后轮反馈控制
  • 线性二次regulator(LQR)转向控制
  • 线性二次regulator(LQR)转向和速度控制

项目支持

1

环境需求

  • Python 3.6.x
  • numpy
  • scipy
  • matplotlib
  • pandas
  • cvxpy 0.4.x

2

怎样使用

1、安装必要的库;2、克隆本代码仓库;3、执行每个目录下的python脚本;4、如果你喜欢,则收藏本代码库:)

3

本地化

扩展卡尔曼滤波本地化

该算法利用扩展卡尔曼滤波器(Extended Kalman Filter, EKF)实现传感器混合本地化。蓝线为真实路径,黑线为导航推测路径(dead reckoning trajectory),绿点为位置观测(如GPS),红线为EKF估算的路径。红色椭圆为EKF估算的协方差。

相关阅读:概率机器人学http://www.probabilistic-robotics.org/

无损卡尔曼滤波本地化

该算法利用无损卡尔曼滤波器(Unscented Kalman Filter, UKF)实现传感器混合本地化。

线和点的含义与EKF模拟的例子相同。

相关阅读:利用无差别训练过的无损卡尔曼滤波进行机器人移动本地化https://www.researchgate.net/publication/267963417_Discriminatively_Trained_Unscented_Kalman_Filter_for_Mobile_Robot_Localization

粒子滤波本地化

该算法利用粒子滤波器(Particle Filter, PF)实现传感器混合本地化。蓝线为真实路径,黑线为导航推测路径(dead reckoning trajectory),绿点为位置观测(如GPS),红线为PF估算的路径。该算法假设机器人能够测量与地标(RFID)之间的距离。PF 本地化会用到该测量结果。

相关阅读:概率机器人学http://www.probabilistic-robotics.org/

直方图滤波本地化

该算法是利用直方图滤波器(Histogram filter)实现二维本地化的例子。红十字是实际位置,黑点是RFID的位置。蓝色格子是直方图滤波器的概率位置。在该模拟中,x,y是未知数,yaw已知。滤波器整合了速度输入和从 RFID 获得距离观测数据进行本地化。不需要初始位置。

相关阅读:概率机器人学http://www.probabilistic-robotics.org/

4

映      射

高斯网格映射

本算法是二维高斯网格映射(Gaussian grid mapping)的例子。

光线投射网格映射

本算法是二维光线投射网格映射(Ray casting grid map)的例子。

k均值物体聚类

本算法是使用k均值算法进行二维物体聚类的例子。

圆形拟合物体形状识别

本算法是使用圆形拟合进行物体形状识别的例子。

蓝圈是实际的物体形状。红叉是通过距离传感器观测到的点。红圈是使用圆形拟合估计的物体形状。

5

SLAM

同时本地化和映射(Simultaneous Localization and Mapping,SLAM)的例子。

迭代最近点匹配

本算法是使用单值解构进行二维迭代最近点(Iterative Closest Point,ICP)匹配的例子。

它能计算从一些点到另一些点的旋转矩阵和平移矩阵。

相关阅读:机器人运动介绍:迭代最近点算法https://cs.gmu.edu/~kosecka/cs685/cs685-icp.pdf

EKF SLAM

这是基于扩展卡尔曼滤波的 SLAM 示例。

蓝线是真实路径,黑线是导航推测路径,红线是 EKF SLAM 估计的路径。

绿叉是估计的地标。

相关阅读:概率机器人学http://www.probabilistic-robotics.org/

FastSLAM 1.0

这是用 FastSLAM 1.0 进行基于特征的 SLAM 的示例。

蓝线是实际路径,黑线是导航推测,红线是 FastSLAM 的推测路径。

红点是 FastSLAM 中的粒子。

黑点是地标,蓝叉是 FastLSAM 估算的地标位置。

相关阅读:概率机器人学http://www.probabilistic-robotics.org/

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

基于图的SLAM

这是基于图的 SLAM 的示例。

蓝线是实际路径。

黑线是导航推测路径。

红线是基于图的 SLAM 估算的路径。

黑星是地标,用于生成图的边。

相关阅读:基于图的SLAM入门http://www2.informatik.uni-freiburg.de/~stachnis/pdf/grisetti10titsmag.pdf

6

路径规划

动态窗口方式

这是使用动态窗口方式(Dynamic Window Approach)进行二维导航的示例代码。

相关阅读:用动态窗口方式避免碰撞https://www.ri.cmu.edu/pub_files/pub1/fox_dieter_1997_1/fox_dieter_1997_1.pdf

基于网格的搜索

  • 迪杰斯特拉算法

这是利用迪杰斯特拉(Dijkstra)算法实现的基于二维网格的最短路径规划。

动画中青色点为搜索过的节点。

  • A*算法

下面是使用A星算法进行基于二维网格的最短路径规划。

动画中青色点为搜索过的节点。启发算法为二维欧几里得距离。

  • 势场算法

下面是使用势场算法进行基于二维网格的路径规划。

动画中蓝色的热区图显示了每个格子的势能。

相关阅读:机器人运动规划:势能函数https://www.cs.cmu.edu/~motionplanning/lecture/Chap4-Potential-Field_howie.pdf

模型预测路径生成

下面是模型预测路径生成的路径优化示例。算法用于状态晶格规划(state lattice planning)。

路径优化示例

查找表生成示例

相关阅读:用于带轮子的机器人的最优不平整地形路径生成http://journals.sagepub.com/doi/pdf/10.1177/0278364906075328

状态晶格规划

这个脚本使用了状态晶格规划(state lattice planning)实现路径规划。这段代码通过模型预测路径生成来解决边界问题。

相关阅读:用于带轮子的机器人的最优不平整地形路径生成http://journals.sagepub.com/doi/pdf/10.1177/0278364906075328用于复杂环境下的高性能运动机器人导航的可行运动的状态空间采样http://www.frc.ri.cmu.edu/~alonzo/pubs/papers/JFR_08_SS_Sampling.pdf

均匀极性采样(Uniform polar sampling)

偏差极性采样(Biased polar sampling)

路线采样(Lane sampling)

随机路径图(PRM)规划

这个随机路径图(Probabilistic Road-Map,PRM)规划算法在图搜索上采用了迪杰斯特拉方法。动画中的蓝点为采样点。青色叉为迪杰斯特拉方法搜索过的点。红线为PRM的最终路径。

相关阅读:随机路径图https://en.wikipedia.org/wiki/Probabilistic_roadmap

Voronoi路径图规划

这个Voronoi路径图(Probabilistic Road-Map,PRM)规划算法在图搜索上采用了迪杰斯特拉方法。动画中的蓝点为Voronoi点。青色叉为迪杰斯特拉方法搜索过的点。红线为Voronoi路径图的最终路径。

相关阅读:机器人运动规划https://www.cs.cmu.edu/~motionplanning/lecture/Chap5-RoadMap-Methods_howie.pdf

快速搜索随机树(RRT)

  • 基本RRT

这是个使用快速搜索随机树(Rapidly-Exploring Random Trees,RRT)的简单路径规划代码。黑色圆为障碍物,绿线为搜索树,红叉为开始位置和目标位置。

  • RRT*

这是使用RRT*的路径规划代码。黑色圆为障碍物,绿线为搜索树,红叉为开始位置和目标位置。

相关阅读:最优运动规划的基于增量采样的算法https://arxiv.org/abs/1005.0416最优运动规划的基于采样的算法http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.419.5503&rep=rep1&type=pdf

  • 基于 Dubins 路径的 RRT

为汽车形机器人提供的使用RRT和dubins路径规划的路径规划算法。

  • 基于Dubins路径的RRT*

为汽车形机器人提供的使用RRT*和dubins路径规划的路径规划算法。

  • 基于reeds-shepp路径的RRT*

为汽车形机器人提供的使用RRT*和reeds shepp路径规划的路径规划算法。

  • Informed RRT*

这是使用Informed RRT*的路径规划代码。青色椭圆为Informed RRT*的启发采样域。

相关阅读:Informed RRT*:通过对可接受的椭球启发的直接采样实现最优的基于采样的路径规划https://arxiv.org/pdf/1404.2334.pdf

  • 批量Informed RRT*

这是使用批量Informed RRT*的路径规划代码。

相关阅读:批量Informed树(BIT*):通过对隐含随机几何图形进行启发式搜索实现基于采样的最优规划https://arxiv.org/abs/1405.5848

  • 闭合回路RRT*

使用闭合回路RRT*(Closed loop RRT*)实现的基于车辆模型的路径规划。

这段代码里,转向控制用的是纯追迹算法(pure-pursuit algorithm)。速度控制采用了PID。

相关阅读:使用闭合回路预测在复杂环境内实现运动规划http://acl.mit.edu/papers/KuwataGNC08.pdf)应用于自动城市驾驶的实时运动规划http://acl.mit.edu/papers/KuwataTCST09.pdf[1601.06326]采用闭合回路预测实现最优运动规划的基于采样的算法https://arxiv.org/abs/1601.06326

  • LQR-RRT*

这是个使用LQR-RRT*的路径规划模拟。LQR局部规划采用了双重积分运动模型。

相关阅读:LQR-RRT*:使用自动推导扩展启发实现最优基于采样的运动规划http://lis.csail.mit.edu/pubs/perez-icra12.pdfMahanFathi/LQR-RRTstar:LQR-RRT*方法用于单摆相位中的随机运动规划https://github.com/MahanFathi/LQR-RRTstar

三次样条规划

这是段三次路径规划的示例代码。

这段代码根据x-y的路点,利用三次样条生成一段曲率连续的路径。

每个点的指向角度也可以用解析的方式计算。

B样条规划

这是段使用B样条曲线进行规划的例子。输入路点,它会利用B样条生成光滑的路径。第一个和最后一个路点位于最后的路径上。

相关阅读:B样条https://en.wikipedia.org/wiki/B-spline

Eta^3样条路径规划

这是使用Eta ^ 3样条曲线的路径规划。

相关阅读:eta^3-Splines for the Smooth Path Generation of Wheeled Mobile Robotshttps://ieeexplore.ieee.org/document/4339545/

贝济埃路径规划

贝济埃路径规划的示例代码。根据四个控制点生成贝济埃路径。

改变起点和终点的偏移距离,可以生成不同的贝济埃路径:

相关阅读:根据贝济埃曲线为自动驾驶汽车生成曲率连续的路径http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.294.6438&rep=rep1&type=pdf

五次多项式规划

利用五次多项式进行路径规划。

它能根据五次多项式计算二维路径、速度和加速度。

相关阅读:用于Agv In定位的局部路径规划和运动控制http://ieeexplore.ieee.org/document/637936/

Dubins路径规划

Dubins路径规划的示例代码。

相关阅读:Dubins路径https://en.wikipedia.org/wiki/Dubins_path

Reeds Shepp路径规划

Reeds Shepp路径规划的示例代码。

相关阅读:15.3.2 Reeds-Shepp曲线http://planning.cs.uiuc.edu/node822.html用于能前进和后退的汽车的最优路径https://pdfs.semanticscholar.org/932e/c495b1d0018fd59dee12a0bf74434fac7af4.pdfghliu/pyReedsShepp:实现Reeds Shepp曲线https://github.com/ghliu/pyReedsShepp

基于LQR的路径规划

为双重积分模型使用基于LQR的路径规划的示例代码。

Frenet Frame中的最优路径

这段代码在Frenet Frame中生成最优路径。青色线为目标路径,黑色叉为障碍物。红色线为预测的路径。

相关阅读:Frenet Frame中的动态接到场景中的最优路径生成https://www.researchgate.net/profile/Moritz_Werling/publication/224156269_Optimal_Trajectory_Generation_for_Dynamic_Street_Scenarios_in_a_Frenet_Frame/links/54f749df0cf210398e9277af.pdfFrenet Frame中的动态接到场景中的最优路径生成https://www.youtube.com/watch?v=Cj6tAQe7UCY

7

路径跟踪

姿势控制跟踪

这是姿势控制跟踪的模拟。

相关阅读:Robotics, Vision and Control - Fundamental Algorithms In MATLAB® Second, Completely Revised, Extended And Updated Edition | Peter Corke | Springerhttps://www.springer.com/us/book/9783319544120

纯追迹跟踪

使用纯追迹(pure pursuit)转向控制和PID速度控制的路径跟踪模拟。

红线为目标路线,绿叉为纯追迹控制的目标点,蓝线为跟踪路线。

相关阅读:城市中的自动驾驶汽车的运动规划和控制技术的调查https://arxiv.org/abs/1604.07446

史坦利控制

使用史坦利(Stanley)转向控制和PID速度控制的路径跟踪模拟。

相关阅读:

史坦利:赢得DARPA大奖赛的机器人

http://robots.stanford.edu/papers/thrun.stanley05.pdf

用于自动驾驶机动车路径跟踪的自动转向方法

https://www.ri.cmu.edu/pub_files/2009/2/Automatic_Steering_Methods_for_Autonomous_Automobile_Path_Tracking.pdf

后轮反馈控制

利用后轮反馈转向控制和PID速度控制的路径跟踪模拟。

相关阅读:城市中的自动驾驶汽车的运动规划和控制技术的调查https://arxiv.org/abs/1604.07446

线性二次regulator(LQR)转向控制

使用LQR转向控制和PID速度控制的路径跟踪模拟。

相关阅读:ApolloAuto/apollo:开源自动驾驶平台https://github.com/ApolloAuto/apollo

线性二次regulator(LQR)转向和速度控制

使用LQR转向和速度控制的路径跟踪模拟。

相关阅读:完全自动驾驶:系统和算法 - IEEE会议出版物http://ieeexplore.ieee.org/document/5940562/

模型预测速度和转向控制

使用迭代线性模型预测转向和速度控制的路径跟踪模拟。

这段代码使用了cxvxpy作为最优建模工具。

相关阅读:车辆动态和控制 | Rajesh Rajamani | Springer http://www.springer.com/us/book/9781461414322MPC课程资料 - MPC Lab @ UC-Berkeley http://www.mpc.berkeley.edu/mpc-course-material

8

项目支持

可以通过Patreon对该项目进行经济支持。如果你在Patreon上支持该项目,则可以得到关于本项目代码的邮件技术支持。本文作者包括有Atsushi Sakai (@Atsushi_twi),Daniel Ingram,Joe Dinius,Karan Chawla,Antonin RAFFIN,Alexis Paques。

原文:https://atsushisakai.github.io/PythonRobotics/#what-is-this


声 明:本栏目信息来源及内容仅作为学术课题研究、技术交流等用途,不作为商业用途;文章观点仅供分享交流,不代表本公众号的立场,转载请注明出处,如涉及版权等问题,请您告知gdbdmiotii@126.com,我们将及时沟通处理。

python画心形代码大全_Python代码合集看点 机器人算法、自动导航算法算法大全...相关推荐

  1. cad统计多条线段总长度插件_超级实用CAD技巧应用汇总!技巧大全、插件合集、快捷键合集等...

    超级实用CAD技巧应用汇总!技巧大全.插件合集.快捷键合集等 各位朋友,CAD福利来啦!超级实用CAD技巧应用汇总,千万不能错过!有技巧大全.插件合集.快捷键合集.字体大全.常用图库大全.常见问题及解 ...

  2. 最新B端产品经理面试问题大全及答案合集(151题全部有答案)【11年大厂面试官呕心制作】

    我会一直长期给你分享B端产品经理面试问题大全及答案合集,助你斩获心仪offer!请你去→工忠号[B端产品经理面试官Aadi],以免错失后续更多实用的B端产品经理面试技巧! 标题 B端产品经理面试问题大 ...

  3. 2021最新FCPX插件合集打包下载Final Cut Pro X插件大全 效果/转场/字幕/发生器

    2021最新FCPX插件合集打包下载Final Cut Pro X插件大全 效果/转场/字幕/发生器 原文及下载地址:https://www.aeziyuan.com/t-19358.html 使用系 ...

  4. 28000款音效音频背景音大全 18.6G合集

    28000款音效音频背景音大全 18.6G合集 28000款音效音频背景音大全 18.6G合集 这波是真的超全,且分类清晰,有需要的可以速度存了   有空会放资源库 不限速下载: https://md ...

  5. python画心形代码大全_情人节锦囊:简单的python表白程序(动画效果)

    今年这个特殊的情人节,如何优雅而又高大上地对自己的心爱女神表白? ? ? 猫老师给你送上锦囊,试试python表白的实现方式吧,是动画版的哦,保证可以如你所愿 ! ! ! 1.动态玫瑰花 代码如下图: ...

  6. python中if的效率_Python 代码性能优化技巧

    选择了脚本语言就要忍受其速度,这句话在某种程度上说明了 python 作为脚本的一个不足之处,那就是执行效率和性能不够理想,特别是在 performance 较差的机器上,因此有必要进行一定的代码优化 ...

  7. python怎么设置代码执行时间_python 代码运行时间获取方式详解

    我们知道为了提高代码的运行速度,我们需要对书写的python代码进行性能测试,而代码性能的高低的直接反馈是电脑运行代码所需要的时间.这里将介绍四种常用的测试代码运行速度的方法. 第一种:使用time模 ...

  8. python爬b站视频_python代码福利:用requests爬取B站视频封面

    最近看到一篇文章介绍了利用Python爬虫爬取B站视频封面的文章,虽然我完全没看文章,但是只看了一眼这个封面图就彻底把我吸引了.不过我也对爬虫这方面比较熟悉了,这么简单的事情还用看别人的文章教我做事? ...

  9. python 的代码格式_python代码格式

    笨办法学 Python · 续 中文版 笨办法学 Python · 续 中文版 原书:Learn More Python 3 The Hard Way 译者:飞龙 自豪地采用谷歌翻译 在线阅读 PDF ...

最新文章

  1. JavaScript是如何工作的:编写自己的Web开发框架 + React及其虚拟DOM原理
  2. 在巨头壁垒下,人工智能细分领域涌现领跑者,这是AI真正的新机遇
  3. Oracle 11g新特性之 - 使用RMAN复制数据库
  4. RISC与CISC比较
  5. TCP 协议如何解决粘包、半包问题
  6. LibreOj 6279数列分块入门 3 练习了一下set
  7. TensorFlow模型实现:UNet模型
  8. Android Note - 内存优化
  9. 天池大赛, Storm
  10. 团体程序设计天梯赛-练习集L1-011 A-B (20分)getline输入
  11. 走向REST:在Spring和JAX-RS(Apache CXF)中嵌入Jetty
  12. 【转】.NET 自带的动态代理+Expression 实现AOP
  13. jQuery中的css部分
  14. Simulated Binary Crossover(SBX)的学习
  15. 使用canvas画出满天繁星
  16. 开放集识别之GPD and GEV Classi ers
  17. 冯建文《数字电路设计》读书笔记
  18. hp计算机如何重装win7,为你解答惠普电脑怎么重装win7系统
  19. HTTPS 前端劫持
  20. matlab构造差商表,牛顿法 代数插值 – 差商表的求法

热门文章

  1. Ruby 教程(一)
  2. Head First 设计模式 —— 13. 代理 (Proxy) 模式
  3. Allegro中尺寸标注显示小数点后位数
  4. 部署企业版lync2013之二:前端准备
  5. 汽车java歌曲_车载音乐推荐 50首适合开车听的歌曲 2019车载歌曲 开车必备100首...
  6. 荣耀平板2 android go,荣耀平板2和华为M2哪个好?华为荣耀平板2和华为M2详细区别对比评测_硬件教程...
  7. Perf的安装与简单使用
  8. STM32 | 基于STM32实现的普通灯泡调光控制器
  9. 非金融专业是否能报考CFA考试?
  10. php的视频怎么保存,premiere怎么保存剪辑好的视频