ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

机器人算法的Python代码合集

机器人算法的Python代码合集

这篇文章里包含了若干个机器人相关的算法代码, 而其中那些专门针对自动导航功能的算法相关代码, 更是被放在了重点的位置, 它们共同构成了这个合集。

其中主要存在的特征具体来讲可以归纳成为三点, 第一点是在实际当中被用得很多的那些算法被挑选了出来, 第二点是所需要的依赖项是最少的, 第三点就是阅读和理解起来都很简单, 能够清楚地明白每一个算法最基本的那套想法是怎么样子的。最后在这里也希望你读完这篇文章之后能得到一些帮助。

前面在这里给大家做一个提示, 这篇文章的内容篇幅是比较长的, 所以建议大家先把文章进行收藏这个操作再进行阅读, 项目的具体地址是在文章的末尾部分, 记得点击一下“好看”这个按钮哦。

一、环境需求

二、你可以按照下面的这些步骤来操作, 首先要把必需的库文件给安装好, 紧接着把当前的这个代码仓库从服务器上克隆下来, 然后去到每一个独立的目录内部, 去把它们对应的脚本一个一个地全部运行起来, 最后呢, 如果在你觉得这个成果还算不错并且比较喜欢的话, 你就可以顺手给它点个收藏或者星标什么的, 三、本地化。

3.第1部分, 进行那个扩展卡尔曼滤波的本地化操作。

该算法是使用扩展卡尔曼滤波器, 也就是括号里面写的那个英文缩写EKF, 来达成对传感器混合就地定位的这个任务的。

图中蓝线代表实际走过的真实路径, 黑线代表导航系统根据当时情况推测出来的运动轨迹, 这部分被标注为dead。绿点表示对位置进行的观测结果, 例如用GPS获取的数据。红线则是通过EKF算法计算和估计出的车辆运行路径。

那个红色的椭圆, 它是EKF所估算出来的协方差。

概率机器人学

3.2 无损卡尔曼滤波本地化

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

线和点的这种含义, 它其实跟咱们在前面用EKF模拟的时候, 所看到的那个例子是完全相同的。

通过使用经过了无差别的训练处理, 并且是被确认属于无损类型的卡尔曼滤波技术, 来对机器人的局部定位过程予以实施和完成。

3.3, 粒子滤波本地化。

这个算法借助粒子滤波器, 也就是通常所说的 PF 这种方式, 去实现了传感器混合本地化这件事。

蓝线代表的是真实走的路径, 黑线代表的是导航系统推测出来的路径, 这里面包含了dead这个词儿的意思, 绿点表示的是位置观测结果, 比如说是GPS给出的信息, 红线则表示是通过PF算法估算出来的路径。

该算法所依赖的一个前提是, 这个机器人是可以去测量出它自身和那个被称为RFID的地标之间存在的距离的, 也就是它确实具备对这两者之间的距离进行实际测量的能力的。

PF这一种情况下的本地化作业, 会去使用到这个测量所得出来的结果。

概率机器人学

3.4 直方图滤波本地化

这个算法, 它是利用直方图滤波器这一种技术手段, 来实现二维本地化操作的一个实例例子。

红十字是它实际所在的位置, 黑点是RFID的位置。

那个蓝色的方格, 代表的就是直方图滤波器在概率意义上的那个具体位置。

在那个模拟过程里面, x和y是未知数, yaw这一项的情况是已经被知道的。

将那些从RFID里拿过来的, 用来做距离观测的数据, 会和那个速度的输入项, 给合到一块儿去, 然后, 用这个组合起来的东西, 来进行本地的定位。

其实是不需要那个初始的位置的。

概率机器人学

四、映射

4.1, 对于高斯网格映射这一概念来说。

这个算法是那个叫做二维高斯网格映射, 它的缩写是grid的东西的一个例子。

4.2 光线投射网格映射

本算法就是咱们能直接看懂的例子, 它是关于二维光线投射网格映射(Ray grid map)这个事儿的。

4.第3个, 是叫做K均值物体的聚类。

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

那个蓝色的圆圈代表的是实际存在的物体的形状。

那个红叉它其实就是通过用距离传感器去观测从而得到的一个点。

我们使用圆形来拟合的方式, 去估计物体的形状, 之后形成的那个红圈, 就是我们所看到的结果。

五、SLAM

也就是同时进行的局部位置确认工作, 还有建立地图的工作, 这个合在一起的说法叫做( and , SLAM)的例子。

5.1 迭代最近点匹配

这个算法其实就是一个例子, 它讲的是如何使用单值解构这个方法来实现二维的最近点匹配, 而这个任务通常被称为迭代最近点匹配, 也可以简写为ICP。

它可以进行计算, 具体的计算内容是从某些点到另一些点的旋转矩阵以及平移矩阵。

关于机器人运动方面的知识, 现在需要介绍迭代最近点算法。

在/cs685/cs685-icp.pdf这个路径下。

5.2 EKF SLAM

这是一个关于基于扩展卡尔曼滤波技术的SLAM示例。

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

绿叉这个存在, 在很多时候被当作是一个估计出来的地标。

概率机器人学

5.3 1.0

这是一个示例, 展示了如何使用1.0来进行基于特征的SLAM。

这里的蓝线代表的是实际走出来的路径, 那条黑线呢是导航系统推测出来的内容, 至于红线所指的则是另一种推测出来的路线情况。

那个红色的标记点, 它确实是中粒子的中心部位。

那个黑点是作为标志性的地点, 而蓝色的叉号是对这个标志性地点的位置所做出的一个大致的估算结果。

概率机器人学

5.4 2.0

这里有一个例子, 它展示的是基于特征的SLAM技术是如何使用的, 并且提到这个例子是和2.0相关联的。

动画的含义和1.0的这种情况是一样的。

概率机器人学

Tim 的SLAM模拟

5.5 基于图的SLAM

这句话描述的是属于那种利用图的方式来进行SLAM操作的例子。

蓝线是实际路径。

那条黑色的线, 它是系统推算出来的导航路径的意思。

那条红色的线, 是根据一种使用图形结构来做同步定位和地图构建的方法来估算出来的路径。

黑星被视作一个地标, 它的主要作用是用来生成图中的边。

基于图的SLAM入门

~/pdf/.pdf

六、路径规划

6.1 动态窗口方式

这里提供的是通过调用动态窗口方法来展开操作的示例代码, 该场景主要应用于针对二维导航进行的处理。

通过使用动态窗口这种办法来进行操作, 从而实现对碰撞的有效避免。

6.2 基于网格的搜索

这是利用迪杰斯特拉算法来完成的, 一种是基于二维网格的最短路径的规划方案。

在动画里面, 那个青色的点儿, 指的是已经被搜索过的那个节点。

下面是采用现在大家广泛知晓的A星算法, 去开展在二维网格环境里的最短路径规划任务。

在动画里面, 那个青色的点儿, 指的是已经被搜索过的那个节点。

那个启发算法, 它是使用了二维欧几里得距离作为计算的依据, 这一点大家需要搞清楚。

我们这是在用势场算法来实现基于二维网格的路径规划。

动画里出现了蓝色的热区图, 这个图把每个格子的势能情况展现出来了。

在关于机器人运动规划这个问题当中, 我们需要涉及到一个势能函数。

~//Chap4--.pdf

6.第3个部分, 关于模型的预测路径生成。

接下来我们看一个具体的例子, 这个例子展示的是如何对模型在进行路径生成的时候所产生的结果进行相关的优化和处理操作。

那个算法是用来做状态晶格规划的 (state)。

对于那种带有轮子的机器人, 我们去寻找一种最优的路线生成办法,这种办法是用来处理不平整的地形情况的。

6.4 状态晶格规划

这个脚本采用了状态格子规划, 也就是所谓的状态晶格规划, 这种方法被用来实现路径的规划工作。

这段代码通过使用模型来预测路径生成这样的方式, 去解决这个边界问题。

对于那种带有轮子的机器人, 我们去寻找一种最优的路线生成办法,这种办法是用来处理不平整的地形情况的。

在复杂的环境底下, 为了让高性能的运动机器人能够成功进行导航操作, 我们需要去对可行状态的空间采样方法展开研究。

~/pubs//.pdf

6.第五个部分是关于随机路径图, 也就是大家常说的PRM这样的规划方法的讲解。

这个随机路径图, 就是常说的PRM规划算法, 在进行搜索的时候, 是用了迪杰斯特拉方法的。

在画面里, 那些蓝色的点就是采样的点位。

青色叉表示迪杰斯特拉方法搜索过的点, 这是现在的人能够直接看懂的普通话书面语表达方式。

那个用红线标记出来的东西, 它就是PRM的最终路径。

随机路径图

6.6 路径图规划

这个路径图也就是人们常说的 Road-Map, 简称是 PRM 的那种规划算法呢。他在进行图搜索的这个工作的时候是采用了迪杰斯特拉方法的。

在动画里的那个蓝点, 其实就是点这个意思。

青色叉表示迪杰斯特拉方法搜索过的点, 这是现在的人能够直接看懂的普通话书面语表达方式。

那个红线呀, 它其实就是那个路径图上面最后得出的那一条路径的意思。

机器人运动规划

这是第五章的pdf文档。

6.7. 也就是人们常说的那个快速扩展随机树, 简称RRT。

这是一个简单的路径规划代码, 该代码使用的是快速搜索随机树方法, 这个方法通常简称为RRT。

黑色圆为障碍物, 绿线是搜索树, 红色叉号则是开始位置和目标位置。

这代码呢, 其实就是使用了那个叫做RRT*的这个东西来做路径规划的。

黑色圆为障碍物, 绿线是搜索树, 红色叉号则是开始位置和目标位置。

关于最优运动规划这件事情, 其核心是基于增量采样的一种算法。

最优运动规划的基于采样的算法

为汽车形的机器人提供的那个路径规划算法, 这个算法是使用RRT和路径规划来弄的。

针对汽车形这种形状的机器人, 给它提供一套用来做路径规划的路径规划算法。这套算法主要是去使用了RRT*这个技术, 然后还涉及到了所谓的路径规划这个环节。

这个路径规划算法是给汽车形式的机器人用的, 而且在使用的时候, 它涉及到了RRT*以及reeds shepp这些东西, 通过这些东西来实现路径的规划。

这是一个关于使用RRT*来进行路径规划的代码。

那个绿色的椭圆形, 表示的是RRT*这个方法在进行随机采样时所使用的区域。

算法 RRT* 它是基于采样来做路径规划的东西, 这个做法能让路径是最优的。它是这样来实现的: 用一个受椭球启发的东西, 然后直接去进行可接受的采样操作, 就这么着把那个最优的基于采样的路径规划的事情给办妥了。

这份代码是基于批量化的RRT*算法来实现路径规划功能的。

批量树, 也就是BIT*算法, 它的工作原理是先把那些看不见摸不着的随机几何方面的内容, 作为搜索的目标进行启发式的挖掘, 然后在这个基础上实现那种能够基于采样操作来完成的最优路径规划功能。

它是基于车辆模型来进行路径规划的, 使用的是闭合回路RRT*(loop RRT*)。

在这段代码里, 关于转向控制方面的事情, 它所采用的办法是纯追迹算法(pure-)。

速度控制这件事, 现在采用的方式是PID。

在复杂的环境条件下面, 通过运用闭合回路这种方法来进行预测, 以此来实现运动规划的目的。

)

应用于自动城市驾驶的实时运动规划

1601.06326

使用了基于采样的算法, 然后通过闭合回路来预测, 这样能够实现最优的运动规划。

这是一个正在进行的路径规划模拟操作, 该模拟方案采用了LQR-RRT*技术。

LQR局部规划使用了双重积分运动模型。

所谓*, 它是一种最优的并且基于采样的运动规划方法, 该方法通过使用自动推导扩展启发来实现。

关于LQR-, 也就是LQR-RRT*这种办法, 它是被用来去解决在一个单摆的相位里面所发生的随机移动路径规划这个问题的。

6.这是关于编号为8的部分, 主要内容是三次样条规划。

这是一段用来做三次路径规划的示例代码。

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

每一个具体的点, 它的指向角度, 也是可以通过进行分析与算式推导的方式来做计算操作的。

6.9 B样条规划

这其实就是一个关于规划方面的例子, 在这个例子里面所采用的是B样条曲线来进行操作。

当你把路径点给输入进去之后, 它这边就会拿这个B样条技术来处理一下, 然后弄出一条非常圆滑的路径出来。

第一个路点和最后一个路点, 它们都位于那个最后的路径之上。

B样条

6.这10个东西是用了Eta 3这个样条路径规划的方法。

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

eta^3- for the Path of

6.第11个章节, 我们来探讨关于贝济埃路径规划这一内容。

这段代码给出了关于贝济埃路径规划的一个具体的例子。

基于这四个控制点来生成一个贝济埃路径。

通过调整起点以及终点处所使用的偏移量数值, 从而得到不相同的贝济埃路径。

自动驾驶汽车生成曲率连续路径的时候, 会去根据贝济埃曲线来进行。

6.12 五次多项式规划

采用五次多项式这种方法来开展路径规划的工作。

它可以根据对五次多项式的计算, 来处理二维路径的问题, 同时也能算出对应的速度以及加速度这三个方面的数据。

用于Agv In定位的局部路径规划和运动控制

6.第13部分, 我们来进行路径规划的讨论。

关于路径规划这个事儿, 这里给出来的是一段示例代码。

路径

6.14 Reeds Shepp路径规划

这里有针对Reeds Shepp路径规划的示例代码。

15.3.2 Reeds-Shepp曲线

用于能前进和后退的汽车的最优路径

ghliu这个作者或者是这个提交记录所对应的人, 他完成了对Reeds Shepp这种曲线的实现工作。

6.15 基于LQR的路径规划

这里有一个用来作为演示的示例程序代码, 这个例子展示了怎样去为一个双重积分模型提供基于线性二次调节器这种方法的规划路径。

6.在第16帧当中, 最合适的路径。

这个段代码在 Frame 里面生成那个最优路径。

青色线是目标路径, 黑色叉是障碍物。

这条红色的线是用来表示预测好的行驶路线的。

在静态的框架当中, 那种能够灵活变化的元素, 它们想要连接到一个处于整个大环境里面的、被认为是最好的那条路线的创建过程。

在静态的框架当中, 那种能够灵活变化的元素, 它们想要连接到一个处于整个大环境里面的、被认为是最好的那条路线的创建过程。

七、路径跟踪

7.进行针对姿势控制的这个方面的跟踪, 把整个过程给弄完整。

这个情况是关于姿态控制的这样一种追踪模拟操作。

逗号, 以及连字符, 在注册商标符号里面, 还有彼得·科克这个名字。

7.2 纯追迹跟踪

这里的路径跟踪模拟, 是在使用纯追迹这一方式来实施转向控制, 同时又是借助于PID这个手段去进行速度控制的。

那个红线指代的就是目标路线, 而绿叉则表示纯粹通过追迹控制机制所达成的目标点, 至于蓝线, 它用来展现跟踪过程中形成的路线。

这里对城市中正在跑的自动驾驶汽车, 它们怎么安排自己走的路线, 还有怎么实际去控制车子动起来, 这些技术方面的情况做了个大调查。

7.这个名为史坦利的控制部分。

进行路径跟踪模拟, 这个模拟过程会使用到史坦利转向控制方法以及PID速度控制方法, 不过在这句话里, 关于史坦利的括号是空的。

史坦利是在那时候, 把那个DARPA的大奖赛给赢了的那个机器人。

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

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进