树莓派小车:智能捡球小车——Q宝

演示视频:浙工大工程实训树莓派——智能捡球小车Q宝_哔哩哔哩_bilibili

一、路线图

在起点播报“需要进行人脸认证”,人脸识别成功后,达到暂停点后,等待用户输入要寻找的目标小球类型,随后三个左转进行小球识别(识别成功后直接直行,不再继续识别下一小球),随后避开障碍物,三个左转进行二维码识别,将小球运送到对应的位置。在需要对用户进行提示(如需要用户操作或正确识别物体后等),会进行语音播报或微信消息推送。

 二、运行过程

 

 三、实验原理

八大模块:

1.巡线模块        2.超声波避障模块

由于我们的项目在分多个阶段进行,所以在不同阶段会调用不同的循迹的代码。

在第一阶段的循迹过程中,智能小车根据车头下方的感应器在判断前进,左右转弯等行为,在遇到第一个直角右转口后,进入阶段二,阶段二是智能小车减速,因为速度过快可能导致车头下方的检测出现小毛病,小车进入第一个左拐路口,增加左转时间,然后直行,到横线处,小车停止,进入阶段三,小车先识别前方的球类,然后倒车到拐口处,原地右转,之后的识别也是类似的操作,随后有一个简单的避障功能,利用超声波检测与前方障碍物的距离,在距离小于一定阈值的时候,小车不再是依靠黑线行动,而是右转绕过障碍物,进入下一个阶段,该阶段是寻找放置球类的地点,每个地点处都黏贴了一张二维码图,小车能够根据二维码图进入相应的停车位。至此结束循迹。

3.人脸识别模块

我们使用的分类器:haarcascade_frontalface_default.xml

使用OpenCV中检测的API函数:detectMultiScale(const Mat& image, vector& objects, double scaleFactor=1.1int minNeighbors, int flagcvSize

4.手势识别模块

树莓派的运算力有限,所以我们直接用百度API实现手势识别。

百度支持支持的24类手势列表:拳头、OK、祈祷、作揖、作别、单手比心、点赞、Diss、我爱你、掌心向上、双手比心(3种)、数字(9种)、Rock、竖中指。

5.小球识别模块

HSV域颜色检测和霍夫圆检测

6.二维码识别模块

使用pyzbar识别二维码

7.语音播报模块

使用百度智能云的语音合成技术,调用百度API生成MP3文件

使用pygame.mixer.music.load()函数播放MP3文件

8.微信通知模块

 使用Server酱,获取SendKey,调用API

四、问题与解决

1.电池电量好像会影响到动力,在进行超声波避障时容易无法回到正确轨道上。
2.WIFI有时候会莫名断开,在vscode端写代码时,还没保存就断开了。
2.进行球类识别测试时,在本地测试效果良好,但是投入实际应用中时,受到光线等因素的影响,识别球类的能力大大下降。
3.摄像头的使用无法共享        解决方法:关闭其他占用摄像头的进程
4.小车可以连接WIFI,但DNS配置错误无法调用外部API接口。解决方法:要通过修改/etc/resolv.conf更新DNS
5.小车摄像头精度不够,视角较小,在识别人脸时,需要不断移动人脸照片,让摄像头能够抓取人脸。

### 使用OpenMV实现自动捡球小车功能 #### 开发环境搭建 为了使用OpenMV开发自动捡球小车,需先安装并配置好开发环境。确保已下载最新版本的OpenMV IDE,并通过USB线将OpenMV相机模块连接到电脑[^1]。 #### 硬件准备与连接 构建自动捡球小车所需的硬件组件包括但不限于:OpenMV Cam H7 Plus摄像头、电机驱动板、两个直流减速马达以及轮子组成的底盘结构。具体接线方式如下所示: - OpenMV CAM 的 UART TX/RX 接口分别对接至电机控制器对应的RX/TX端; - VCC 和 GND 正确接入电源供应线路; - 驱动器PWM信号输出脚位连结至各伺服马达控制输入端; ```plaintext +-------------------+ | | | OpenMV Cam |----UART_TX --> Motor Driver <-- UART_RX ----| | | ^ (IN1, IN2) | +--------+----------+ | +---> DC Motor 1 | +----------------------------------+---> Wheel Set A GND PWM1------------------------------+ PWM2------------------------------> DC Motor 2 +---> Wheel Set B ``` #### 软件编程逻辑 编写Python脚本以指导OpenMV识别目标物体(即要拾取的球),并通过串行通信发送指令给运动控制系统调整方向前进直至接近物品位置停止动作完成抓取操作。下面给出一段简化版示范代码片段用于检测圆形轮廓特征作为代表性的“球”。 ```python import sensor, image, time, pyb sensor.reset() # Reset and initialize the sensor. sensor.set_pixformat(sensor.RGB565) # Set pixel format to RGB565 (or GRAYSCALE) sensor.set_framesize(sensor.QVGA) # Set frame size to QVGA (320x240). clock = time.clock() while(True): clock.tick() img = sensor.snapshot().lens_corr(1.8) blobs = img.find_blobs([(30, 100, -64, 64, -32, 32)], pixels_threshold=200, area_threshold=200, merge=True) if blobs: largest_blob = max(blobs, key=lambda b:b.area()) img.draw_circle(largest_blob.cx(), largest_blob.cy(), int(math.sqrt(largest_blob.area()/math.pi)), color=(255,0,0)) print("Ball detected at X:",largest_blob.cx(),"Y:",largest_blob.cy()) # Send command via serial port based on ball position relative to center of screen... ser = pyb.UART(3, baudrate=9600) if largest_blob.cx()<img.width()/2-20 : ser.write('L') # Turn Left elif largest_blob.cx()>img.width()/2+20 : ser.write('R') # Turn Right else: ser.write('F') # Move Forward print(clock.fps()) # Note frames per second. ``` 此段程序实现了基本的对象追踪机制,能够帮助理解如何利用图像处理技术配合机械装置达成特定任务目的。实际应用时还需考虑更多因素如光照条件变化影响颜色阈值设定等问题.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值