2851浏览
查看: 2851|回复: 4

[高级教程] 【N+】千里马Plus项目式课程 - 06 视觉巡线2

[复制链接]
本帖最后由 Nplus实验室 于 2023-5-29 09:56 编辑

【N+】千里马Plus项目式课程
06 视觉巡线2
- N+桃李科教

上一篇:【N+】千里马Plus项目式课程 - 05 视觉巡线1
下一篇:
【N+】千里马Plus项目式课程 - 07 视觉巡线3

教学目标

1.优化巡线程序;
2.学习PID算法在视觉巡线中使用;
3.完成PID算法优化巡线程序。
教学准备
千里马、地图、数据线

教学过程
导入 → 巡线程序优化 → PID算法  → 总结

1.导入
课程回顾:
上节课学习了视觉巡线,通过测试可知:巡线区间分的越细,巡线效果越好。
【N+】千里马Plus项目式课程 - 06 视觉巡线2图1
上节课千里马在视觉巡线过程中还是会摇摇晃晃的,这节课我们将继续优化巡线程序。

2.巡线程序优化
前面我们将区间划分为了3个部分,如果分为5个呢?黑线位置越靠两边,转弯速度越大;黑线位置越趋近于中间,越趋向于直行运动。
【N+】千里马Plus项目式课程 - 06 视觉巡线2图2

程序如下图所示:
【N+】千里马Plus项目式课程 - 06 视觉巡线2图3

刷入程序后,进行测试,这时,千里马巡线速度可以更快了,不管是转弯还是直行,速度变化都顺滑很多了。如果将屏幕区间分为7个,测试结果是不是更好一些?尝试写出7个区间的优化程序并进行测试。
【N+】千里马Plus项目式课程 - 06 视觉巡线2图4

完整参考程序如下:
【N+】千里马Plus项目式课程 - 06 视觉巡线2图5

3.PID算法
既然千里马巡线时的运动状态或巡线区间可以分为 2 档、3 档、5 档、7 档,那是不是还能继续细分呢?9 档?11 档?……直到无限细分。调速区间越细分,巡线效果越好。但是这样写程序会越来越长,有什么办法呢?这里就要引出 PID 调速算法了。
PID 算法,是控制理论中最常用、最经典的算法,在我们的生产和生活中应用的非常广泛。它并不是什么很神圣的东西,大家一定都见过 PID 的实际应用:比如四轴飞行器,再比如平衡小车,还有汽车的定速巡航、3D 打印机上的温度控制器、恒温热水器等。就是类似于这种:需要将某一个物理量“保持稳定”的场合(比如维持平衡,稳定温度、转速等),PID 都会派上大用场。
PID算法公式如下:
【N+】千里马Plus项目式课程 - 06 视觉巡线2图6

编程中更常用的公式如下:
【N+】千里马Plus项目式课程 - 06 视觉巡线2图7

可以看出公式是相当复杂的,但是我们不需要用那么复杂的公式,用简化后的公式即可。根据公式,可以看到 PID 分为 3 个部分:比例调节(P)、积分调节(I)、微分调节(D)。那么这三者之间是什么关系呢?每个部分的调节对巡线会产生什么样的影响呢?因为比较复杂,所有我们只分析P调速对巡线的影响。


3.1 算法分析
以视觉巡线为例,测量出来的实际值为黑线的起点坐标 X1,但是我们希望黑线的起点坐标能够在屏幕中央,也就是位于 x = 128 的位置。这时,误差 Error = X1 - offset = X1 - 128。那么接下来,我们就可以根据这个误差大小来调节转速的大小了,也就是我们上面分析的,黑线越是远离屏幕中心,误差越大,这时需要的转速也越大。根据 PID 公式,转速 V_turn 的计算公式为:
V_turn = Vp_turn = Kp × Error = Kp × (X1 - 128)

我们知道,物体的运动一般可以由直线运动和转弯运动组成,所以速度也可以由直线运动速度 V_straught 与转弯速度 V_turn 组成。为了使千里马保持一定的运动速度,我们可以分别给左右轮加上或减去一个转弯速度 V_turn,这样千里马中心的速度就能够保持不变。
V_left = V_straught + V_turn
V_right = V_straught - V_turn

根据这个公式,我们可以简单的理解为,P 控制器的作用是根据误差的大小产生一个转弯速度 V_turn,用于叠加在左右轮的速度上。
那么 Kp 的值取多少合适呢?这就需要我们根据实际巡线情况,手动进行调节与设置了。多尝试几次,应该就能设置出一个比较合适的 Kp 值了,Kp的值越大,两个轮子的速度差就会越大。

3.2  P调速算法程序编写
1.根据前面的分析,新建变量,并将变量初始化存进函数中。编写程序并调节 Kp 值。程序中的的“offset”变量就是屏幕中轴线的坐标。
【N+】千里马Plus项目式课程 - 06 视觉巡线2图8

2.定义巡线时电机的函数,同时设置两个参数,“V_left”、“V_rignt”表示左右轮子的速度。
【N+】千里马Plus项目式课程 - 06 视觉巡线2图9

3.定义巡线函数,因为在计算过程中,“V_left”与“V_rignt”的值可能会出现小数和负数,所以需要进行取整和绝对值,可以保证结果是正整数。
【N+】千里马Plus项目式课程 - 06 视觉巡线2图10

4.加上判断等语句,完整程序如下。修改摄像头增益,也就是亮度,范围是0-255,数值越大,亮度越大。
【N+】千里马Plus项目式课程 - 06 视觉巡线2图11

5.刷入程序后,将千里马放在地图上进行测试,根据测试结果修改变量“Kp”的值,调节范围是0-1;以及V_straight的值和摄像头增益、角度等等。


4.总结
1.PID算法的主要作用是什么?


5.课后作业
1.熟悉PID算法,根据公式编写程序。


千里马Plus购买链接:N+千里马Plus

本课PPT、视频及案例代码下载:

链接: https://pan.baidu.com/s/1FHJq-zlqEXlnEOeDMsTFQg
提取码: 8888

三春牛-创客  初级技神

发表于 2023-7-9 21:53:49

厉害厉害
回复

使用道具 举报

三春牛-创客  初级技神

发表于 2023-7-9 21:54:50

赞!!!!
回复

使用道具 举报

花生编程  中级技匠

发表于 2023-7-10 21:36:20

教程很不错!
回复

使用道具 举报

花生编程  中级技匠

发表于 2023-7-10 21:38:22

赞!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail