如何通过目标追踪功能制作一个手机摄像头实时跟踪小车,该设计运用OpenCV的图像处理APP,手机APP通过摄像头实时跟踪设定的颜色目标,并且通过手机蓝牙将目标坐标位置和大小等信息输出,配合蓝牙串口模块和我写的配套Arduino数据接收库,就可以做成一个简单的手机跟踪寻迹小车。
手机实时跟踪寻迹小车视频演示:
手机实时跟踪寻迹小车手机APP截图:
安装方法:
1.直接安装Trace.apk,Android5.0以上系统需要到设置里赋予应用相机和蓝牙权限
2.在豌豆荚搜索“迹”安装,同上
使用方法:
1.进软件之后可以点击连接蓝牙,选择你的蓝牙模块(模块需要事先在手机系统蓝牙设置里面配对好),连接上之后如果有目标信息就会通过蓝牙发送到模块上,Arduino进行读取就可以了。
2.点击左上角的按钮进入预览画面,此时在预览窗口中点击任何一个你想追踪的物体,就会自动进行处理输出数据了,顶栏会显示你选中的颜色。
3.这里说明一下,跟踪原理是以颜色为特征的,所以应该尽量避免视野中出现颜色相同的物体,同时如果发现跟踪物体的周围出现大量小块的目标块,可以适当调大屏幕下方的进度条,直到杂块消失只剩一个目标。
说明一下屏幕下方各个控件的含义:
1.左边的按钮是切换手机前后镜头的(现在应该没有不带前置镜头的手机了吧…)
2.进度条用于调节图像处理阈值,这个值用于色块过滤,可以理解为,用于设置最小的目标块的限制,也就是当目标小于一定程度就过滤掉。
3.T、X、Y三个参数是目标的信息,XY是坐标大家都知道(坐标的最大值跟手机镜头分辨率有关);T是目标的大小信息,如果检测到多个目标或者没有检测到任何目标这里会显示E(error)。T可以用于粗略得判断物体的远近(近大远小),不过更推荐的方式是用Y轴判断远近(见后文的小车)。
手机实时跟踪寻迹小车设计总结:
这个小车大家可以随意搭建,只要能把你的手机放上去就行。Tmp上我用了两个舵机改造成轮子,把180度的舵机改成可以连续旋转的360舵机,这样就省下了电机驱动以及麻烦的减速箱,而且只用一根信号线就可以控制电机的正反转和速度,这部分要是大家感兴趣可以上网搜搜相关改造教程。
然后我们需要把小车和手机联系起来,通过蓝牙模块:
需要使用从机模块,最好把波特率设置为115200,连线如下:
蓝牙模块 Arduino
Tx -> Rx
Vcc -> 5V
Gnd -> Gnd
1.注意蓝牙的Rx是不接Arduino的,因为Arduino只需要接收APP的数据而不需要发送,这样的话留出的Tx就可以通过Serial.Print()打印到电脑端的串口助手。
2.当然,考虑到一般Arduino都只有一个硬件串口,这样串口被蓝牙模块占用了之后每次下载都需要拔下蓝牙以避免数据串扰,解决办法是换用软串口或者换用Mega等不止一个串口的板子。
3.软件部分,提供已经封装好的Arduino库,放到library文件夹后打开示例就会用了
需要自己完成的部分就是,把获取到的x,y坐标转换为小车电机的速度,思路是这样的:
1.假设我们希望目标始终在屏幕中间,那么当y坐标大于屏幕y最大值的一半时让车有一个往前的基础速度V,反 之则是向后的基础速度-V;
2.如果x坐标大于屏幕x最大值的一半,那么让车子有一个旋转速度Vt,反之有个旋转速度-Vt;
最后赋值给小车的速度是:左轮 = V+Vt,右轮 = V-Vt,也就是所谓的差速驱动了。
最后给出APP和Arduino库,见“相关文件”下载。
1