APP下载

树莓派六足机器人实现智能分类搬运(二)

2023-05-05杨广峰

电脑报 2023年16期
关键词:树莓置信度列表

杨广峰

在第8期的《用树莓派机器人实现更智能的垃圾分类搬运》中,树莓派六足机器人相继实现了正对目标物体的识别搬运、任意位置目标物体的识别搬运。接下来,我们将考虑多个目标物体的识别问题,尝试让机器人完成多任务的识别和搬运工作。本文将在原来的程序中增加步骤判断,实现一个任务完成后,自动進入下一个目标的搬运任务。

一、树莓派实验器材及连接

实验器材:树莓派六足机器人一套(六足机器人、树莓派4B、古德微扩展板、电机驱动板、USB摄像头),目标物体两个(红色、蓝色海绵正方体各一个,边长为10厘米)(如图1)。

二、创建物体检测模型

创建物体检测模型的步骤与前例相同。

1.登录网站,开始“物体检测

登录古德微机器人网站(www.gdwrobot.cn),选择“物体分类”进入“远程使用树莓派摄像头进行物体分类”页面。

2.采集并标注,训练与验证

使用拍照功能,不断变换机器人的位置与角度,进行目标图片的添加,完成目标图片的采集工作。这个过程目标图片采集得越多,后期识别的效率和准确度就会越高。

然后,完成对采样的目标图片的物体的标注工作。接下来,使用“开始训练”按钮对采集的图片进行训练。最后对预览图片中的物体进行分类验证,目标物体的分类识别置信度在80%以上,即说明训练模型具有较高的应用价值。

3.下载训练模型文件,保存至树莓派中

完成拍照采集与训练验证后,点击“下载树莓派上使用的模型”,等到“模型转换下载完成”提示。这时,文件下载到树莓派的/home/pi/model/object_detection目录下,模型文件为model.tflite,对应标签文件为labels.txt。通过Windows的远程桌面连接进入树莓派进行查看,labels.txt的文件内容包含两行,依次对应训练模型的分类名称:“红色、蓝色”。

三、六足机器人实现搬运编程

本例中,机器人面向前方进行拍照,自动寻找并识别目标物体,读取物体的位置数据,计算物体的位置偏差,根据情况进行相应的偏差处理,机器人自动转向,按照步数前进至物体前方,并实施搬运,完成第一个任务后程序自动修改变量“步骤”值,开启下一个任务。

1.程序初始化

首先,控制摄像头两个舵机,调整其最佳拍摄角度,设置机器人的最初姿态,将机器人任务的开关变量“步骤”设为1,创建“目标列表”,记录需要完成的目标物体名称,完成对机器人的初始化。这里设计了两个任务,其目标物体的名称为“红色”和“蓝色”,如需要更多的夹取任务,在列表追加项目即可(如图2)。

2.拍照与检测函数

使用机器人摄像头对前方拍照,调用物体检测模型对照片进行检测,返回检测结果列表(如图3)。

3.读取检测结果函数

这个函数是从检测结果列表中找到我们的目标(红色物体)的名称和置信度。

通过判断检测结果列表的长度是否大于0来区分有没有检测结果,没有检测结果则需要跳出判断重新检测;有结果,则对检测结果进行下一步的处理。首先,循环读取检测结果列表中的每一个检测结果字典,分别读出这个检测结果字典中的置信度和物体名称。然后判断物体名称是否红色物体,如果符合条件,则找到了我们的目标名称和置信度,中断循环,准备下一个环节(如图4)。

4.计算位置偏差函数

首先,从检测结果字典中获取检测框的位置列表,分别获取检测框的左上和右下两个点的横、纵坐标值。计算出检测框的物体横向像素位置(横向中心),与图片中心位置相比较获取物体的位置偏差。这里使用的公式为:位置偏差=320-物体横向位置。因为摄像头拍出的照片是640×480,所以照片的横向总宽度是640,照片的中心位置是320(如图5)。

5.位置偏差处理函数

获取了物体的位置偏差,接下来就需要控制机器人进行相应的旋转,以实现机器人能够锁定目标物体进行前进。考虑到偏差较大的情况,我们还需要对位置偏差做偏差除以8进行缩放,并且对偏差值进行了一定范围(从负10到正10)的限制。偏差处理结束后,机器人按照位置偏差的角度进行相应的旋转,最后将置信度设为0,完成本次拍照的识别纠正工作(如图6)。

6.计算距离与步数函数

首先,计算出检测框的物体横向像素大小(横向长度),根据计算公式得到机器人与目标物体之间的当前距离。然后,计算出机器人到达物体所需要的前进步数。最后,控制机器人按照步数前进。为使机器人更加准确地到达最佳夹取距离,这里对前进步数进行了限制,限制机器人每次识别后最少走1步,最多走10步,以实现反复拍照、识别和校正的目的(如图7)。

7.智能搬運物体

首先,判断机器人是否到达最佳夹取位置,如果条件满足,开始夹取物体。然后,控制机器人先向后移动,再左转90度,再向前,到达指定的投放位置。接着,控制机器人放下物体,后退9步,到达地图的中央位置,完成第一个智能搬运工作。如果当前任务是最后一个任务,将变量“步骤”设为0,标志着整个搬运工作全部结束,否则将变量“步骤”加1,开启下一个搬运任务(如图8)。

8.主程序

首先,调用程序初始化函数。然后,建立一个重复当真的循环,实现根据任务反复拍照、识别、纠偏、前进,直至到达最佳夹取位置,实现夹取任务。根据多任务的要求,每次循环前需要根据步骤从目标列表中读取当前目标,目标物体有效识别后,如果偏差较大,进行合适的偏差缩小,机器人自动旋转至目标物体的正前方,根据距离计算出步数,并进行有限步数(1-10步)的前进,如果达到了最佳夹取距离,机器人完成夹取任务。最后,为了解决因为目标物体不在机器的前方而造成的识别为空的情况,我们给机器人设置了一个识别不成功时,原地自行旋转30度的操作,自动寻找识别(如图9)。

经过多次测试,机器人在任意角度、任意位置时均能成功夹取目标物体,第一个任务结束后,能够自动切换目标任务,继续完成第二个目标的智能搬运工作,从而实现了任意目标、任意位置、多任务的智能搬运升级。在这个例子的基础上,下一篇我们将为六足机器人添加更多的功能,如利用物联网控件实现手机微信控制机器人,同时实现自动与手动切换控制机器人。

猜你喜欢

树莓置信度列表
硼铝复合材料硼含量置信度临界安全分析研究
学习运用列表法
扩列吧
基于树莓派的骑行智能头盔设计
正负关联规则两级置信度阈值设置方法
基于树莓派的远程家居控制系统的设计
响应面法优化红树莓酒发酵工艺
列表画树状图各有所长
置信度条件下轴承寿命的可靠度分析
不含3-圈的1-平面图的列表边染色与列表全染色