8511| 7
|
[项目] 四轮方向舵小车视觉巡线的尝试-2 |
本帖最后由 rzyzzxw 于 2023-2-9 19:13 编辑 【背景】 在上一个帖子中,记录了四轮方向小车(3D打印版)的视觉巡线的初步尝试,收获超过了预期,二哈识图的巡线功能确实好用好玩。 这个帖子继续尝试和优化。 【目标任务】 黑色虚线路线视觉巡线的测试。 【器材】 四轮方向小车 1 二哈识图 1 电工胶带 【提示】
mind+ 主控: 用户库: 传感器: 执行器: 二哈用IIC与掌控板通信,请在二哈中设置协议为IIC。 方向舵四轮小车的转向是由舵机来控制的,直行、左转和右转都是通过舵机的角度调节来完成。 按照我的小车的舵机安装方式,80度为直行,小于80度右转,大于80度左转。 方向舵机的角度应该随二哈识别中测试出的转向预测箭头的终点坐标x2偏离中线x=160的大小动态调整,偏离中线x=160越大,舵机的转向角度也应该越大。 用x2坐标的取值范围0-320映射舵机转向角度140-20(80+-60),这里用更大的转向角度是为减少四轮小车的转弯半径(相比万向轮的三轮小车,四轮方向舵小车转弯半径大多了,所以DF的纸质地图用不了)。 为了减小转弯半径,减小了小车前后轮的轮距。 地上的寻线地图也是专门贴的,小于转弯半径的弯小车一定是会脱线的。 速度控制在两个TT电机驱动的后轮,直道时速度大些,弯道时速度小些,而且越弯速度越小,这样可减少脱线概率。 我用二哈识别寻线得到的箭头的终点的x坐标和中线x坐标160差的绝对值(范围0-160)的大小来确定电机速度,在四轮小车上测试后发现,比用起点坐标的X1更能准确预测方向,寻线更流畅。 电机的速度扩展库中李亮工程师用百分比来处理,所以用100-前述绝对值的1/4来实现弯度越大(绝对值大)速度越小。 完整程序如下: 停车函数放在否则中时脱线时会停车,这里没有放进去是为了虚线段路线测试。 【测试】 测试视频 【程序设计2】 上面的程序在实线运行时效果挺好的,相当的顺滑,但是在虚线部分有脱线的情况出现。 在虚线时小车会有较大的摆动,仔细观察分析后发现: 1、在虚线部分,较短的黑胶带会有箭头方向的变化,有时得到是对角方向的箭头,同时空白处没有可以提供数据的箭头,下一个箭头出现后会有的较大的数据变化,导致方向改变。 2、较长的黑胶带比短的可以提供更多的箭头方向信息,较短的空白比长空白效果好。 3、同样的长度的线条,较窄的线条可以提更精准的箭头方向数据。 4、调整二哈合适的倾斜角度,让二哈能较早的看到虚线的下一段黑线条。 5、环境光线改变,二哈要重新学习线条,环境光较暗时背光处二哈自己的影子出会影响箭头识别,必要时请打开二哈的LED照明。 6、合适的转弯半径,不能超过小车的转弯能力,否则一定会脱线。 所以环境和场地显得相当重要,我的场地地面砖缝也会影响,后面的改进是综合进行的。 下面的程序稍稍优化,增加屏幕中看不到箭头时方向和速度的记忆。 【测试】 说明:在做上面视频中测试时,还没有对虚线寻线进行上面观察的那么多思考,二哈的倾角也没有调整。测试视频三中进行了调整,让二哈可以连绵不断的看到虚线中的黑胶带。(如果场地不是地面,而是整块白色背景不反光的板子,效果会好很多。) 【程序3】 针对前面测试表现出来的问题,程序再次进行优化。 如上图所示,同样的X2值偏离中心线的角度可能不同,所以用X2偏离中心线来定义转向角度还有不足,算法需要改进。 先复习一次函数。 在上图中可以看到,如果用绿色坐标系,就可以完美对接数学一次函数知识,我们要求出二哈屏幕中的箭头终点(x2,y2)和原点(0,0)两点连线所成直线的斜率。 再由斜率和反正切函数求出倾斜角,然后由倾斜角来定义小车转弯的角度和运行速度。 由正切函数特点,倾斜角为90时正切不存在,所以要数据再分段转化一下。 经过不断测试,分析数据变化规律,写出了下面的程序。 转换坐标系,求出倾斜角。 有箭头,按箭头方向,无箭头,按记忆方向运动。 当箭头终点进入中下区时记录倾斜角度备用。 转向角度和速度都由倾斜角来确定,角度偏离新坐标y轴越大,转向角度大,速度小。 如果屏幕中无箭头,按记忆角度定方向和速度。 完整程序: 【测试】 【小结】 经过不断分析与思考,算法优化和场地环境研讨,针对性解决问题,达到了比较满意的效果。 还有新的想法,等完成后发布。(开学了,时间紧,更新会慢点。) 【附件】 二哈寻线1.rar 二哈寻线2.rar 二哈寻线3.rar |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed