本帖最后由 baiheren 于 2022-3-8 14:25 编辑
看到群里有用AI摄像头传感器进行巡线的文章,也忍不住来抖抖,就说说用摄像头来进行物体跟踪的一种实现方法,这种方法可用在一些创意项目的搭建和物体识别的比赛中,比如今年的wro中的“机器人运动赛”。
在视觉AI中,物体跟踪是一个重要的功能。本文探讨一种EV3环境下,使用摄像头,运用PD方法进行物体跟踪的实现方法,,不同于以往“机器人先转弯调整好角度,再追踪物体”的方法。而是比较好的实现机器人“一边前进后退,一边转弯”的效果。
【实验环境】: 1、EV3小车,驱动轮胎为:49.6*28。从动轮为球轮。 2、AI智慧眼摄像头(该摄像头可以直接连接到EV3上使用,无需其它转接模块且该摄像头有自定义颜色学习功能,我们正是利用该功能进行“较单一颜色的物体跟踪”)。 先上视频看一下效果:
【实现思路】: 1、摄像头的屏幕座标如下:(黑框为准) 2、通过上图我们可以得出,屏幕的中心位置座标是(x,y=63,112),如果物体的中心座标与屏幕中心座标相吻合,就是物体的理想位置,或称为要达到的目标位置。物体跟踪的总体思路就是要合理控制机器人的动作,让物体能保持在屏幕的中心位置。具体如下: 如下图所示: 如果捕捉到的物体y座标大于中心点的y值,我们理解为物体在机器人的前面,这个时候,机器人要往前走;反之,机器人要后退。 同理,如果捕捉到的物体x座标大于中心点的x值,说明物体在机器人的右侧,机器人要朝右转,反之亦然。 3,程序具体实现: 在具体程序中, EV3先判断捕捉到的y值,如果在屏幕范围外,就停止运动,报警,表示物体跟丢了:
否则,判断y值是否大于屏幕中心点的y值,以此决定机器人是前进还是后退: 前进的功率用power做基础,用PD方法做修正。程序如下图: 这部分用到的kp_y、kd_y取值范围,决定了机器人前进后退的灵敏度,不同的车型和轮胎,所取值可以不同,要以实际测量为依据。 同时,这两个值还受摄像头的倾斜角度、物体的远近影响,在使用中,一般根据任务的需求,先调整好摄像头的角度,固定后,再进行P、D值的修正。 程序中的kp_x,kd_x值用来修正turn_power,作用是控制机器人左右转动,这部分程序要注意两个问题,一是因为摄像头的屏幕不大,x值的变化范围不大,导致物体在左右移动的速度过快时,容易丢失物体;二是注意边后退边转弯,要在程序部分把转向的系数乘以-1,如图:
完整程序截图如下:程序有两个分支,下面的分支就是考虑边后退,边转弯的情况。除了乘以 -1,其它没变。有兴趣的朋友,可以做成自定义图标,方便调用。
摄像头跟随乒乓球移动小车程序.ev3
(21.44 KB, 下载次数: 10)
|