4331| 7
|
[项目] 麦小昆视觉寻线 |
本帖最后由 rzyzzxw 于 2023-2-17 18:16 编辑 【背景】 麦小昆,一个活泼可爱的小车车。在完成了四轮方向舵小车视觉寻线的初步探索后,我想尝试一下用他和二哈来进行视觉寻线。 麦小昆有较小的转弯半径,可以用DF的纸质场地,这样就能很方便的在教学活动进行麦小昆视觉寻线展示。 经过探索,找到了一个简单的算法写程序,达到了当前环境下比较稳定流畅的视觉寻线效果。 现在汇报如下。 【测试视频】 【器材】 麦小昆 1 二哈识图 1 寻线地图 1 锂电池 1(二哈供电用) 铜柱 螺丝等 【资料】20200420153959qgxlbp.pdf (dfrobot.com.cn) 一、HUSKYLENS 巡线实现逻辑 如何让麦昆在白底黑线的巡线地图上循着黑线运动呢?其实我们只需要知道麦昆相对黑线是什么位置,分下面三种情况: 1、当麦昆在黑线的偏右位置时,控制麦昆向左转弯; 2、当麦昆与黑线相对居中时,控制麦昆直行; 3、当麦昆在黑线的偏左位置时,控制麦昆向右转弯。 具体应该怎么实现呢? 我们将 HuskyLens 在巡线过程中屏幕上显示的信息剥离出来,抽象成下图的几何数学模型。 HuskyLens屏幕的分辨率是 320×240,屏幕左上角的O点为屏幕的坐标原点(0, 0),水平向右方向为 X 轴正方向,竖直向下方向为 Y 轴正方向,因此屏幕右下角的坐标为(320, 240)。上图中橙色虚线为屏幕的中轴线,这条线的横坐标值为160。上图屏幕中黑色的线,是 HuskyLens 摄像头“看到”的巡线地图线条,蓝色箭头为 HuskyLens 计算出来的线条方向,蓝色箭头的起点坐标为(x1, y1),终点坐标为(x2, y2)。 下面的程序中我们用终点x坐标x2相对中线位置来判断小车运行方向及确定运行速度。 二、二哈使用提示
【程序设计】 mind+ 套件 传感器 参考官方资料,有思路1和2。 思路1、当 HuskyLens 检 测 到 黑 线 在 屏 幕 的 左 边 时,我们将区间 [150,170] 设置为小车的直行区间,当起点坐标值 x1 在这个区间内时,控制小车直行;当x1<150 时,控制小车左转;当 x1>170 时,控制小车右转。 思路2、按照我们先前的优化思路,既然可以将屏幕分成 3 个运动调节区间,为什么不继续分为 5 个呢?黑线位置越趋近两边,转弯速度越大;黑线位置越趋近于中轴线,转弯速度越小。或者更进一步,直接分为 7 个运动调节区间呢。 官方参考程序: 思路2完成任务效果一定比1好。 思路3、参考2的程序,我进行优化,将屏幕分为320个调节区间,用映射将箭头终点x坐标x2的取值范围0-320和两轮的速度建立联系。 麦小昆前面的万向轮主要起支撑作用,小车运行的方向和速度都要依靠两个后轮的正转速度差来完成。
在写帖子时对程序的稳定性进行了耐久性测试,在写这行字前二哈耗尽了给它供电的电池的电后小车脱线了(换电后小车又恢复了寻线运行)。 我对继续测试的稳定运行充满信心。 程序如下: 以80为直行速度,+-80得到速度范围0-160。 记录这个函数是因为它让我取得了第一次稳定流畅寻线测试成功。 为了得到更大的直行和转弯速度,将速度范围0-255充分应用后,得到寻线2函数,这时直行速度约127。 映射的应用是程序算法的重点,感谢官方文档的启发。 完整程序: 【小结】 1、二哈识图寻线的功能很有趣,值得大家继续探索。 2、麦小昆电池容量小,二哈识图要通过usb单独供电,IIC的通信线要接到麦昆IIC口。 3、麦大昆电池容量大(漂流给别的老师了),等漂回来后再做测试。 4、实线比虚线寻线稳定(不脱线),麦小昆视觉寻虚线不打算做了。 5、可以用黑色易擦白板笔在浅色地板上画细线条寻线,效果也很好。 【附件】 麦昆二哈寻线.zip 【提示】后续学习与探索发在回复中,请伙伴们不要留言。感谢。 |
rzyzzxw 发表于 2023-2-9 21:29 HuskyLens摄像头系列 | 写给小学生看的视觉PID巡线算法 https://mc.dfrobot.com.cn/thread-300508-1-1.html?fromuid=727937 (出处: DF创客社区 - 分享创造的喜悦) |
1月13日学习笔记 晚上,再次学习铁熊老师的文章:HuskyLens摄像头系列 | 写给小学生看的视觉PID巡线算法 https://mc.dfrobot.com.cn/thread-300508-1-1.html?fromuid=727937。 根据公式,可以看到 PID 分为 3 个部分:比例调节(P)、积分调节(I)、微分调节(D)。 按照陈老师的程序,照抄如下,帖子刚发的时候就读过几遍了,虽然上过小学,可是硬是没读懂,记得当时照样子抄了程序,也不没有成功寻线,放弃了探索。 这一次又读,并且一句句写程序一句句理解,竟然对上面P寻线部分读懂了。 并且发现,我上面帖子中映射的算法,和P寻线是异曲同工的,难怪能够稳定的寻线。 有一点不同,我在程序中仍然用了我的思路,用终点的x坐标x2来求Error。感觉效果挺好的。 第一次的尝试,直线速度取了120。 当我理解了程序后,Kp直接用120/160=0.75。 |
© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed