
- 收藏
- 加入书签
基于图像识别的自动玫瑰花采摘机设计
摘要:玫瑰花目前是需求量最大的花卉之一,除了观赏之外,玫瑰花的用途也很广泛,如食用,制药,制作香精、化妆品等。本文设计了一台基于STM32单片机及图像视觉识别技术的玫瑰花采摘机,使用STM32单片机作为主控制器控制各个模块的合理运行完成玫瑰花采摘作业,使用超声波模块的避障功能、使用OpenMv的颜色识别功能、用D-H法推导机械臂运动方程来解决三个自由度的机械臂采摘问题。
关键词: 自动玫瑰花采摘机 颜色识别 D-H法 三个自由度机械臂
引言:采摘是农业工作中重要的一项,而国内目前现有技术是人工采摘或者半自动化手持机械臂采摘,采摘速度慢效率低,面对短暂花期和庞大的需求量已经不能满足人们的需求。自动采摘机是以花卉作为对象,兼有人类部分信息感知和行动功能、可重复编程的柔性自动化设备,能完成不适合人工完成的动作,减轻作业强度,提高作业及精度,实现无人化作业。
玫瑰花采摘机的设计采用模块化技术,功能模块的重复使用,使得重复性的开发工作大大减少,从而减少了整个系统开发的时间和成本,而且可广泛应用于各种花卉果蔬的采摘,对促进农业的大规模发展有一定的意义。玫瑰采摘机更趋向于专一化,并且具有一定针对性,可以提高作业的精准度和采摘速度。
玫瑰红采摘机模型:
(一)设计要求
1.设备运行时需自主规避障碍。
2.采摘时,基于图像识别技术,机械臂自主寻找目标,避免与其他物体发生干涉。
3.机械臂具有良好的灵活性。
(二)各部分设计与关键技术
1.对于花卉中的障碍需要模型拥有对外的识别用具,这里采用了OpenMv来对物体进行识别。
本设计拟采用OpenMv机器视觉模块对玫瑰花的茎、叶、花、以及花骨朵等部位进行颜色、大小、形状等方面的识别,便于正确分清楚花的各个部位,以便正确识别,控制机器人的正确采摘。
值得注意的是,由于物体的距离不同,我们可以采用不同的像素去采集图像,所以我们可以根据需要,选择QQVGA、QVGA、VGA等模式。而且由于对花朵不同距离的把握,也需要对摄像头不同像素的情况进行详细的python编辑。这里有三对阈值参数:①亮度,范围[0,100],纯黑到纯白;②颜色a,范围[127,-128],红色到绿色;③颜色b,范围[127,-128],黄色到蓝色。
颜色阈值可以通过(工具——机器视觉——阈值编辑器)调整
thresholds = [(35, 67, 26, 62, -86, 103),
(58, 100, -43, 127, 22, 127),
(72, 46, -83, -43, 39, 127)]
sensor.set_pix(sensor.RGB565)
sensor.set_fra(sensor.QVGA)
img = sensor.snapshot()
print(blob)
由上列程序可实现对目标花卉的颜色识别,识别后可给出花卉的大致方位,将其以坐标的形式表现出来,用以方便下一步机械臂对花卉的识别,采摘等处理。为了进一步提升对花卉的识别,又添加了一步对花卉图片的识别,当读取到花卉的图片时OpenMv会标记出花卉的位置,程序如下:
#include <QpenMv.h>
int main()
{
cam.setResolution(640, 480);
Image rose = cam.loadImage("rose.jpg");
std::cout << "Color: " << rose_color << std::endl;
std::cout << "Shape: " << rose_shape << std::endl;
return 0;
}
为了防止机械臂对花朵及根茎产生损伤,那么就需要测量与各个部位的距离,这里需要用到OpenMv的测距功能,其采用的是单目摄像头,想要实现测距,就需要选参照物,利用参照物的大小比例来计算距离。
由此公式表明:实际长度和摄像头里的像素成反比,简化就是:距离 = 一个常数/直径的像素,具体操作步骤就是先测出这个常数的值,就是先让物体距离摄像头10cm,打印出摄像头里直径的像素值,然后相乘,就得到了k的值。即:距离=这个常数/摄像头里像素点。
2.由于系统在田间运行所以需要自主避障,这里我们计划采用超声波避障模块。
利用摄像头和视觉识别系统,对路面和土地中的地形地貌进行判断,对障碍物进行判断,利用避障模块把障碍成功躲避,实现机器人的稳定性走。本项目的避障超声波模块拟采用HC-SR04模块和MB1043模块。HC-SR04模块具有性能稳定,高精度,盲区小的优势。
3.本系统使用舵机控制三个自由度的机械臂完成采摘及收集动作。
将舵机连在STM32开发板上。当机械臂收到来自蓝牙/WiFi发出的信号时,通过机械手抓取花茎,随后进行剪切,再将花朵投放在篮子里。
因为采摘机是用三个自由度的机械臂完成采摘及收集动作,所以首先要了解舵机的工作原理:
通过stm32单片机产生PWM信号控制舵机。
舵机的驱动是比较容易的,这里我们引入了位置PID算法。
这样我们就把舵机的速度调节变成了 PID 参数大小的调节。完成这些,我们就可以通过编程完成舵机模块的内容。接下来就需要进行机械臂的坐标变换。
4.采摘工作必然是多角度的自由工作,所以对机械臂的要求也很苛刻。
利用机械臂的编程,把OpenMv中对花的情况做出位置确定,并进行采摘,并且把采摘下来的花枝投放到篮子中。机械臂的坐标变换是根据D-H法建立而来的,该方法是机器人运动学上的建模方法,通过在每个连杆上建立一个坐标系,再根据齐次变换来实现两个连杆上的坐标变换。掌握基本原理之后,我们再结合各个模块进行编程,最后通过机械臂实现采摘动作。
(三)结论
本文设计的自动玫瑰花采摘机如图5所示,可实现自动避障,自主采摘和收集。在采摘机完成采摘后可以由控制人员控制其继续前往其他作业地点。
采摘机因其操作对象具有颜色鲜明的特点,采用颜色和图像识别技术,三自由度机械臂的使用可以更加便捷快速的完成玫瑰花的采摘,后续仿真实验也将会对设计进行验证并对不足之处进行完善。
参考文献
[1]杨洲, 张嘉勤, 李歆祺,等. 基于STM32的智能机械臂小车避障抓取设计与实现.
[2]孟建平. 基于STM32的多自由度机械臂设计研究[J].时代农机, 2017(7):1.
[3]王玉荣, 刘云泉, 潘荣晴. 农业果蔬采摘机器人机械手设计[J].电视技术,2019,43(15/16):73-75
[4]边源. 《番茄采摘机械手的研究与设计》.豆丁网, 2009(4).
[5]孟庆鑫,王晓东,等.《机器人技术基础》.哈尔滨工业大学出版社, 2006(9)