网易首页 > 网易号 > 正文 申请入驻

【python】一文洞悉Python必备50种算法(附解析)

0
分享至

本文是一些机器人算法(特别是自动导航算法)的Python代码合集。

其主要特点有以下三点:选择了在实践中广泛应用的算法;依赖最少;容易阅读,容易理解每个算法的基本思想。希望阅读本文后能对你有所帮助。

前排友情提示,文章较长,建议收藏后再看。

目录

一、环境需求

二、怎样使用

三、本地化

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

二、怎样使用

  1. 安装必要的库;

  2. 克隆本代码仓库;

  3. 执行每个目录下的python脚本;

  4. 如果你喜欢,则收藏本代码库:)

三、本地化

3.1 扩展卡尔曼滤波本地化

该算法利用扩展卡尔曼滤波器(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星算法进行基于二维网格的最短路径规划。

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

启发算法为二维欧几里得距离。

  • 势场算法

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

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

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

6.3 模型预测路径生成

下面是模型预测路径生成的路径优化示例。

算法用于状态晶格规划(state lattice planning)。

  • 路径优化示例

  • 查找表生成示例

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

6.4 状态晶格规划

这个脚本使用了状态晶格规划(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)

6.5 随机路径图(PRM)规划

这个随机路径图(Probabilistic Road-Map,PRM)规划算法在图搜索上采用了迪杰斯特拉方法。

动画中的蓝点为采样点。

青色叉为迪杰斯特拉方法搜索过的点。

红线为PRM的最终路径。

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

6.6 Voronoi路径图规划

这个Voronoi路径图(Probabilistic Road-Map,PRM)规划算法在图搜索上采用了迪杰斯特拉方法。

动画中的蓝点为Voronoi点。

青色叉为迪杰斯特拉方法搜索过的点。

红线为Voronoi路径图的最终路径。

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

6.7 快速搜索随机树(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.pdf MahanFathi/LQR-RRTstar:LQR-RRT*方法用于单摆相位中的随机运动规划 https://github.com/MahanFathi/LQR-RRTstar

6.8 三次样条规划

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

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

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

6.9 B样条规划

这是段使用B样条曲线进行规划的例子。

输入路点,它会利用B样条生成光滑的路径。

第一个和最后一个路点位于最后的路径上。

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

6.10 Eta^3样条路径规划

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

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

6.11 贝济埃路径规划

贝济埃路径规划的示例代码。

根据四个控制点生成贝济埃路径。

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

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

6.12 五次多项式规划

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

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

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

6.13 Dubins路径规划

Dubins路径规划的示例代码。

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

6.14 Reeds Shepp路径规划

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

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

6.15 基于LQR的路径规划

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

6.16 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.pdf Frenet Frame中的动态接到场景中的最优路径生成 https://www.youtube.com/watch?v=Cj6tAQe7UCY

七、路径跟踪

7.1 姿势控制跟踪

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

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

7.2 纯追迹跟踪

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

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

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

7.3 史坦利控制

使用史坦利(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

7.4 后轮反馈控制

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

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

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

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

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

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

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

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

7.7 模型预测速度和转向控制

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

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

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

八、项目支持

可以通过Patreon(https://www.patreon.com/myenigma)对该项目进行经济支持。

如果你在Patreon上支持该项目,则可以得到关于本项目代码的邮件技术支持。

本文作者包括有Atsushi Sakai (@Atsushi_twi),Daniel Ingram,Joe Dinius,Karan Chawla,Antonin RAFFIN,Alexis Paques。

原文: https://atsushisakai.github.io/PythonRobotics/#what-is-this 作者:AtsushiSakai,日本机器人工程师,从事自动驾驶技术开发,精通C++、ROS、MATLAB、Python、Vim和Robotics。 译者:弯月,责编:郭芮

1

2.

3.

5.

6.

7.

8.

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
日本13年来首次被拒,中日情况有变,高市不服,当众喊话

日本13年来首次被拒,中日情况有变,高市不服,当众喊话

命运自认幽默
2026-01-05 00:08:18
36年前陈宝国主演的盗墓恐怖片!尺度大到少儿不宜

36年前陈宝国主演的盗墓恐怖片!尺度大到少儿不宜

释凡电影
2025-08-14 09:33:19
在党内搞政治攀附,广西来宾市人大常委会原主任沙君俊被双开

在党内搞政治攀附,广西来宾市人大常委会原主任沙君俊被双开

澎湃新闻
2026-01-04 18:50:27
套人最多,跌得最惨的5只股票!

套人最多,跌得最惨的5只股票!

财经智多星
2026-01-04 11:47:43
燃烧对比:国产香烟怎么烧得如此之快?

燃烧对比:国产香烟怎么烧得如此之快?

十柱
2026-01-02 16:57:54
都被骗了?马杜罗被抓,副总统接权,委反对派:是谈判达成的退出

都被骗了?马杜罗被抓,副总统接权,委反对派:是谈判达成的退出

李健政观察
2026-01-03 18:33:10
美国、德国、法国、韩国、英国等国媒体纷纷把目光转向了中国武汉

美国、德国、法国、韩国、英国等国媒体纷纷把目光转向了中国武汉

扶苏聊历史
2025-12-16 18:18:18
特朗普政府要求美国石油公司投资委内瑞拉

特朗普政府要求美国石油公司投资委内瑞拉

新华社
2026-01-04 20:13:02
中国股市:如果接下来迎来牛市,就买这一种股票,赚到盆满钵满!

中国股市:如果接下来迎来牛市,就买这一种股票,赚到盆满钵满!

股经纵横谈
2026-01-04 21:54:09
大陆公布沈伯洋住家卫星照,赖清德急了,沈伯洋沉默,不简单

大陆公布沈伯洋住家卫星照,赖清德急了,沈伯洋沉默,不简单

探史
2026-01-04 18:46:08
硕士学位被撤销后,她的教师资格也被注销!

硕士学位被撤销后,她的教师资格也被注销!

超级数学建模
2026-01-03 22:32:58
随着62岁穆帅率队3-1,布拉加3-3,葡超最新积分榜出炉

随着62岁穆帅率队3-1,布拉加3-3,葡超最新积分榜出炉

侧身凌空斩
2026-01-04 04:29:11
前中兴副总:中国采用穷举法跟美国打科技战,把整个产业链全干光

前中兴副总:中国采用穷举法跟美国打科技战,把整个产业链全干光

顾史
2026-01-03 17:17:39
中国直飞委内瑞拉航班取消,客机将空机返委,航司称目前从委内瑞拉飞中国的航班正常;华人游客拍到委居民排长队抢购物资,有超市已被买空

中国直飞委内瑞拉航班取消,客机将空机返委,航司称目前从委内瑞拉飞中国的航班正常;华人游客拍到委居民排长队抢购物资,有超市已被买空

中国能源网
2026-01-04 16:49:04
司晓迪再曝新料!洗脚、视频通话还有唱K,网友曝会议细节最搞笑

司晓迪再曝新料!洗脚、视频通话还有唱K,网友曝会议细节最搞笑

除夕烟火灿烂
2026-01-04 09:51:08
2026年田朴珺翻身,告别王石再钓大鱼

2026年田朴珺翻身,告别王石再钓大鱼

东方不败然多多
2026-01-03 13:28:16
好看的打扮不管在哪,都很吸引人

好看的打扮不管在哪,都很吸引人

美女穿搭分享
2026-01-01 11:01:35
中日情况有变,跟高市早苗通完电话,特朗普马上发总统令

中日情况有变,跟高市早苗通完电话,特朗普马上发总统令

混沌录
2026-01-04 23:57:56
现年54岁的酒井法子公开了新年服装照,引粉丝惊叹

现年54岁的酒井法子公开了新年服装照,引粉丝惊叹

随波荡漾的漂流瓶
2026-01-03 19:25:14
上海一网友吐槽餐厅菜品一菜两色,质疑混炒剩菜,店家:系酒精加热不均导致,并非食材不新鲜或掺杂剩菜

上海一网友吐槽餐厅菜品一菜两色,质疑混炒剩菜,店家:系酒精加热不均导致,并非食材不新鲜或掺杂剩菜

黄河新闻网吕梁频道
2026-01-03 11:05:57
2026-01-05 01:08:49
机器学习爱好者社区
机器学习爱好者社区
机器学习深度学习等干货文章!
118文章数 333关注度
往期回顾 全部

科技要闻

雷军:骂小米汽车有流量,但别故意抹黑

头条要闻

特朗普为什么还要掳走马杜罗夫人 美媒分析

头条要闻

特朗普为什么还要掳走马杜罗夫人 美媒分析

体育要闻

女子世界第一,9年前在咖啡店洗碗

娱乐要闻

《小城大事》上星央八 热血筑梦正当时

财经要闻

李迅雷:扩内需必须把重心从"投"转向"消"

汽车要闻

最高续航310km 岚图泰山8或将上半年发布

态度原创

亲子
家居
房产
健康
旅游

亲子要闻

孩子身上发出的信号父母要留意

家居要闻

黑白碰撞 个性多元冷冽风

房产要闻

单盘最高狂卖64亿!海南楼市2025年最全榜单发布!

这些新疗法,让化疗不再那么痛苦

旅游要闻

元旦假期“热度拉满”:吃住行游购娱全面火爆

无障碍浏览 进入关怀版