一种基于图像识别的机械手掌控制方法及取书和放书装置与流程

文档序号:16663269发布日期:2019-01-18 23:06阅读:446来源:国知局
一种基于图像识别的机械手掌控制方法及取书和放书装置与流程

本发明涉及自动化设备领域,尤其是一种基于图像识别的机械手掌控制方法及取书和放书装置。



背景技术:

目前,校内与社会上的大型图书馆快速发展,每天都有上万本图书的借出与归还,这对图书管理员来说无疑是一个巨大的负担,不仅工作量大,而且效率低。人力管理对图书的整理具有滞后性,大大地降低了图书馆运行的效率。

智能型图书馆机器人可以替代人力对书本进行管理。在书架上取书和放书是书本管理的重要环节,是书本管理的物理执行步骤。现有的机器人取放书本技术是使用机械臂、机械手掌或者其他模拟人手的取放书机械结构来实现的,需要针对取放书本而开发出控制这些机械结构的控制算法。

现有的技术中,通过坐标设定、颜色追踪和对书本条码扫描等功能,可以控制机器人到达目标书本所安放/将要安放的书架所在位置,也可以控制机械手掌升高或降低到相应的高度,但是上述过程只是完成了机械手掌的大概定位。在取书的过程中,最关键的步骤是用机械手掌将目标书本从书堆中抓取出来,在放书的过程中,最关键的步骤是用机械手掌将目标书本放入到书堆中。而实际应用环境中,绝大部分是书堆都不是所有书与水平面垂直也就是直观意义上的“整齐排列”,通常是书堆的一部分属于“整齐排列”,而部分书本是与水平面成一定角度也就是直观意义上的“倾斜”,甚至有部分书本是与水平面平行也就是直观意义上的“倒下”的,同时一个书堆中的每本书厚度可能互不相同,这些现实中普遍存在的问题都为机械手掌取书和放书的实现带来了困难。在这两个取书和放书的关键过程中,机械手掌必须与书本进行物理接触,但是现有技术中机械手掌的姿势无法与书堆中“整齐排列”、“倾斜”和“倒下”的书本匹配,导致机械手掌强行操作造成书本损坏。

申请人在2018年8月1日申请了发明一项名为“一种取放书籍一体化的机械手掌”的发明专利,其包括一个由固定挡板、活动挡板和蝶形合页构成的书夹,书夹的张开程度是可调的,因此可以夹持不同厚度的书本来实现取书和放书的功能,书夹和机械手掌整体的平移和旋转也可以通过机械手掌内部的舵机或者外部的舵机来控制。这种机械手掌具备了现有技术中的大概定位功能,也就是可以准确地到达目标书本所安放/将要安放的书架所在位置,然后升高或降低到一定高度以到达相应的书架层,然后平移到目标书本在该层书架上所安放/将要安放的位置。但在现有的控制算法控制下,这种机械手掌仍存在不能精确适应书堆排列情况而容易造成书本损坏的问题,需要精确的控制算法来对这种机械手掌进行控制。



技术实现要素:

为了解决上述技术问题,本发明的目在于提供一种基于图像识别的机械手掌控制方法及取书和放书装置。

本发明所采取的第一技术方案是:

一种基于图像识别的机械手掌控制方法,用于控制机械手掌取书,所述机械手掌包括由第一挡板和第二挡板组成的书夹,所述书夹用于夹持书本,所述控制方法包括以下步骤:

获取针对目标书堆进行水平拍摄所获得的第一图片;所述目标书堆包括所要取出的目标书本;

从第一图片中识别出目标书本的边界进而由目标书本的边界拟合出第一直线;

根据第一直线在第一图片中的倾斜程度计算出第一角度;

将书夹的倾斜角度调整为与第一角度相对应的角度;

利用经过角度调整后的书夹从目标书堆中取出目标书本。

进一步地,所述从第一图片中识别出目标书本的边界进而由目标书本的边界拟合出第一直线这一步骤是通过霍夫变换进行的。

进一步地,所述根据第一直线在第一图片中的倾斜程度计算出第一角度这一步骤,具体包括:

获取第一直线上的任意两个点在第一图片中的坐标;

根据所述两个点的坐标,计算第一直线的斜率;

根据第一直线的斜率,计算出第一角度。

进一步地,所述根据第一直线的斜率,计算出第一角度这一步骤,所用公式为:

式中θ1为第一角度,(x1,x2)和(y1,y2)分别为第一直线上的任意两个点在第一图片中的坐标,为第一直线的斜率。

本发明所采取的第二技术方案是:

一种基于图像识别的机械手掌控制方法,用于控制机械手掌放书,所述机械手掌包括由第一挡板和第二挡板组成的书夹,所述书夹用于夹持书本,所述控制方法包括以下步骤:

获取针对目标书堆水平拍摄的第二图片;所述目标书堆包括书本所要放入的目标位置,所述目标位置为目标书堆的边缘或目标书堆中两本书之间的缝隙;

从第二图片中识别出目标位置进而由目标位置拟合出第二直线;

根据第二直线在第二图片中的倾斜程度计算出第二角度;

将书夹的倾斜角度调整为与第二角度相对应的角度;

利用经过角度调整后的书夹将书本放入目标书堆中的目标位置。

进一步地,所述从第二图片中识别出目标位置进而由目标位置拟合出第二直线这一步骤是通过霍夫变换进行的。

进一步地,所述根据第二直线在第二图片中的倾斜程度计算出第二角度这一步骤,具体包括:

获取第二直线上的任意两个点在第二图片中的坐标;

根据所述两个点的坐标,计算第二直线的斜率;

根据第二直线的斜率,计算出第二角度。

进一步地,所述根据第二直线的斜率,计算出第二角度这一步骤,所用公式为:

式中θ2为第二角度,(x3,x4)和(y3,y4)分别为第二直线上的任意两个点在第二图片中的坐标,为第二直线的斜率。

本发明所采取的第三技术方案是:

一种基于图像识别的取书装置,包括控制器、摄像系统、机械手掌和舵机,所述控制器分别与摄像系统、机械手掌和舵机连接;

所述控制器用于运行程序以执行第一技术方案所述控制方法;

所述摄像系统用于针对目标书堆拍摄第一图片供控制器处理;

所述机械手掌包括由第一挡板和第二挡板组成的书夹,所述书夹用于夹持书本,所述书夹用于在控制器的控制下从目标书堆中取出目标书本;

所述舵机用于在控制器的控制下将书夹的倾斜角度或机械手掌整体的倾斜角度调整为与第一角度相对应的角度。

本发明所采取的第四技术方案是:

一种基于图像识别的放书装置,包括控制器、摄像系统、机械手掌和舵机,所述控制器分别与摄像系统、机械手掌和舵机连接;

所述控制器用于运行程序以执行第二技术方案所述控制方法;

所述摄像系统用于针对目标书堆拍摄第二图片供控制器处理;

所述机械手掌包括由第一挡板和第二挡板组成的书夹,所述书夹用于夹持书本,所述书夹用于在控制器的控制下将书本放入目标书堆中的目标位置;

所述舵机用于在控制器的控制下将书夹的倾斜角度或机械手掌整体的倾斜角度调整为与第二角度相对应的角度。

本发明的有益效果是:通过高效的控制方法,控制机械手掌或书夹等用于取放书的机械结构精确地旋转一定角度,使得机械手掌或书夹可以与所要取放的书本或位置平行,使得书夹可以准确地插入书本之间的缝隙当中,完成取放书操作。总之,通过本发明,书夹等用于取放书的机械结构的角度可以与书本的摆放相匹配,在能准确地取放书的基础上避免了机械结构对书本的损坏。

附图说明

图1为本发明方法所使用的一种取放书籍一体化的机械手掌的结构图;

图2为一种可以应用本发明的书堆的示意图;

图3为实施例1方法的流程图;

图4为实施例2方法的流程图。

具体实施方式

本发明的所有实施例可以使用申请人另外申请的发明专利“一种取放书籍一体化的机械手掌”来实现,但本发明不限于使用上述专利文件所公开的机械手掌来实现。

上述专利文件所公开的一种取放书籍一体化的机械手掌的结构参照图1,所要进行取放书操作的书堆参照图2。实际应用中,多本书堆放成的书堆都是书脊朝外的,这样便于取放,本发明各实施例以机器人以及摄像系统面向书脊为例进行说明,其他堆放方式的书堆也可以参照适用。本发明也可以用于只对一本书构成的“书堆”进行取放的情形。

图1中,机械手掌通过第一挡板a和第二挡板b组成的书夹夹取书本,而第一挡板a和第二挡板b是平板状,因此第一挡板a和第二挡板b可以插入书堆中各本书之间的缝隙中,从而进行取书或者放书的操作。通过下述各实施例说明的方法,可以调整第一挡板a和第二挡板b的倾斜角度,使得第一挡板a和第二挡板b与所要取放的书本的边缘或者书本之间的缝隙平行,进而使得第一挡板a和第二挡板b可以顺利夹取书本并完成取放书本的动作,避免因书夹倾斜角度与书本不一致而造成书本损坏。

实施例1

本实施例控制方法用于控制机械手掌取书,参照图3,所述控制方法包括以下步骤:

获取针对目标书堆进行水平拍摄所获得的第一图片;所述目标书堆包括所要取出的目标书本;

从第一图片中识别出目标书本的边界进而由目标书本的边界拟合出第一直线;

根据第一直线在第一图片中的倾斜程度计算出第一角度;

将书夹的倾斜角度调整为与第一角度相对应的角度;

利用经过角度调整后的书夹从目标书堆中取出目标书本。

优选地,拍摄第一图片时摄像头面向书堆的书脊一面且镜头画面与地面水平,所拍摄出来的第一图片如图2所示。

在图2所示的目标书堆中,包含了机械手掌所要取出的目标书本。优选地,使用霍夫变换对第一图片进行处理,从而可以将第一图片中目标书本的边界提取进来,进一步拟合成第一直线,第一直线的倾斜程度便等于目标书本的倾斜程度。霍夫变换是一种可以检测间断点边界形状的算法,它通过将图像坐标变换到参数空间,来实现直线与曲线的拟合。

将第一直线的倾斜程度转换成用角度来描述,从而得到第一角度。根据第一角度来调整机械手臂上的书夹的倾斜角度,便可以使得书夹与所要取出的目标书本平行,进而使得书夹可以插入目标书本与其旁边书本之间的缝隙中,从而顺利取出书本。

进一步作为优选的实施方式,所述根据第一直线在第一图片中的倾斜程度计算出第一角度这一步骤,具体包括:

获取第一直线上的任意两个点在第一图片中的坐标;

根据所述两个点的坐标,计算第一直线的斜率;

根据第一直线的斜率,计算出第一角度。

进一步作为优选的实施方式,所述根据第一直线的斜率,计算出第一角度这一步骤,所用公式为:

式中θ1为第一角度,(x1,x2)和(y1,y2)分别为第一直线上的任意两个点在第一图片中的坐标,为第一直线的斜率。

本实施例中,可以从第一图片中选定位于第一直线上的任意两个像素点,以这两个像素点的坐标来计算第一直线对应的第一角度。如果提取到的两个像素点的坐标分别为(x1,x2)和(y1,y2),那么第一角度便为

在第一图片是水平拍摄的情况下,第一图片参考系其实便是大地参考系,因此第一角度便是书夹应该与地面形成的角度大小。驱动书夹或者书夹所在的机械手掌旋转,使得书夹与地面所成角度等于第一角度,便可以使书夹顺利插入目标书本与旁边书本的缝隙中,进而完成取书操作。

实施例2

本实施例控制方法用于控制机械手掌放书,参照图4,包括以下步骤:

获取针对目标书堆水平拍摄的第二图片;所述目标书堆包括书本所要放入的目标位置,所述目标位置为目标书堆的边缘或目标书堆中两本书之间的缝隙;

从第二图片中识别出目标位置进而由目标位置拟合出第二直线;

根据第二直线在第二图片中的倾斜程度计算出第二角度;

将书夹的倾斜角度调整为与第二角度相对应的角度;

利用经过角度调整后的书夹将书本放入目标书堆中的目标位置。

机械手掌所要完成的放书操作,实际上就是将书本放进两本书之间的缝隙中,或者放在书堆的边缘,因此两本书之间的缝隙或书堆的边缘便是所要放入的目标位置;而机械手掌本身具有将目标位置两边的书本推开以形成放书空间的功能,因此需要做的是调整机械手掌的角度使得书夹的方向与书堆边缘或者缝隙匹配。

通过霍夫变换,可以识别出目标位置并将其转换成倾斜程度相同的第二直线。参照实施例1所述方法,可以计算出第二直线在第二图片中的倾斜程度,从而得到第二角度,进而根据第二角度来对书夹或者机械手掌整体进行调整。

实施例3

本实施例一种基于图像识别的取书装置,包括控制器、摄像系统、机械手掌和舵机,所述控制器分别与摄像系统、机械手掌和舵机连接;

所述控制器用于运行程序以执行实施例1所述控制方法;

所述摄像系统用于针对目标书堆拍摄第一图片供控制器处理;

所述机械手掌包括由第一挡板和第二挡板组成的书夹,所述书夹用于夹持书本,所述书夹用于在控制器的控制下从目标书堆中取出目标书本;

所述舵机用于在控制器的控制下将书夹的倾斜角度或机械手掌整体的倾斜角度调整为与第一角度相对应的角度。

控制器通过获取摄像系统拍摄到的图片,执行相关程序代码来执行实施例1所述的控制方法来进行处理,并向机械手掌和舵机发出控制信号,从而实现自动取书。

其中,舵机可以安装在图1所示机械手掌上的相应位置,使得舵机可以单独控制第一挡板a和第二挡板b的转动,从而控制第一挡板a和第二挡板b组成的书夹的倾斜角度。也可以将图1所示机械手掌整体安装在舵机上,使得舵机可以控制机械手掌整体的转动,从而控制书夹的倾斜角度。

本实施例中所用的摄像系统可以是openmv。

实施例4

本实施例一种基于图像识别的放书装置,包括控制器、摄像系统、机械手掌和舵机,所述控制器分别与摄像系统、机械手掌和舵机连接;

所述控制器用于运行程序以执行实施例2所述控制方法;

所述摄像系统用于针对目标书堆拍摄第二图片供控制器处理;

所述机械手掌包括由第一挡板和第二挡板组成的书夹,所述书夹用于夹持书本,所述书夹用于在控制器的控制下将书本放入目标书堆中的目标位置;

所述舵机用于在控制器的控制下将书夹的倾斜角度或机械手掌整体的倾斜角度调整为与第二角度相对应的角度。

本实施例的实现可以参照实施例3的说明来进行。

实施例5

本实施例对实施例3和实施例4所用的控制器和摄像系统进行说明。本实施例中,使用arduino主控板作为控制器,使用openmv摄像头作为摄像系统。

arduino主控板的控制方法:首先建立个结构体,该结构体内含浮点型数组data和整型变量len,分别是对数据的存储和判断数据的个数,对舵机进行初始化,需要调用#include<servo.h>这个头文件库,建立伺服控制对象servo_8。调用该库中的attach接口函数,该函数用于设定舵机的接口,如8号引脚。调用该库中的write()函数,该函数用于设定舵机的旋转角度,可以设定的角度是0-180度。初始化舵机,使得舵机运动到初始角度。然后对串口进行配置,调用#include<softwareserial.h>头文件库,调用该库的begin()函数,实现对串口的打开,为了能与openmv通讯,入口参数设置为115200。并调用该库的available()函数,检测串口是否接受到数据,当从openmv接收到数据,available()值大于0,用if语句判断,当if()为真,执行getlist(),该函数用于收集数据,将数据存储到数组中,arduino主控板接收到的数据形式为{[x1,y1,x2,y3]},调用#include<softwareserial.h>头文件库中的read()函数和#include<arduino.h>头文件库中的while()函数,读取串口接收到的一个字符,当接收到‘{’字符,while()函数为假,跳出while()循环,否则一直等待,调用#include<softwareserial.h>头文件库中的readstringuntil()函数,该函数用于读取串口的数据,直到接收到‘}’,此时定义一个字符s,用于存储{}内的字符串数据,再定义一个字符类型的变量str,用for()循环对字符串s内的每个字符进行处理,用#include<arduino.h>头文件库中的length()函数测量字符串s内的字符个数,设置个整型变量i,设置为0,当i小于字符串s内的字符个数,执行for()循环内的语句,当接收到‘[’字符,str为空字符,当接受到的字符不是‘[”,”]’时,将字符存储在str中,定义一个为0的整型变量,当接受到第一个‘,’时,将str中的字符用toint()函数转换成整型并存储到数组中,k变为1,str为空字符,同理,遇到第二个与第三个‘,’时,分别存储到数组中,此时,数组中存储的数据分别为x1,y1,x2,y2.由(y2-y1)=k(x2-x1)得到斜率k,由atan()函数,得到一个角度,又因为一度等于57.29,多以该角度乘于57.29得到机械臂该旋转的角度,定义一个变量__var__35282_24230,用于存储该角度,此时用write()函数,分别对4个引脚赋值,8号引脚为__var__35282_24230,9号引脚为90,10号引脚为90,11号引脚为90。最后,调用#include<string.h>头文件库中的memset()函数清空数组data中的数据,并调用#include<softwareserial.h>头文件库中的end()函数关闭串口。

openmv摄像头的控制方法:此算法用python语言实现,首先要对openmv摄像头进行配置,导入sensor模块,对sensor模块的reset()函数进行调用,实现对openmv摄像头初始化,然后配置openmv摄像头的像素格式,调用sensor模块的set_pixformat()函数,像素格式有两种,一种为rgb565色彩图(每像素16位),另外一种为crayscale灰度图(每像素8位)。此发明用的是rgb565,所以set_pixformat()函数入口参数为sensor.rgb565,接着配置openmv的像素大小,调用sensor模块的set_framesize()函数,入口参数分别有sensor.qqvga:160x120,sensor.qqvga2:128x160,sensor.qvga:320x240,sensor.qqcif:88x72,sensor.qcif:176x144,sensor.cif:352x288,此发明用的是分辨率为320x240,即qvga,所以入口参数为sensor.qvga,为了让以上设置发挥作用,调用sensor模块的skip_frames()函数,入口参数为10,即跳过10帧。为了实现openmv摄像头与主控板的联系,导入pyb模块的uart(uart_idx,baud_rate)函数,入口参数uart_idx为串口id,因为openmv摄像头只有串口3,所以入口参数uart_idx为3,入口参数baud_rate为波特率,此发明使用115200baud/s的传输速率。接着便是采集数据,初始化一个img对象,用于保存图像,为了能获取图像,调用sensor模块的snapshot()函数,把openmv采集的图像放在img中,为了能从图像扫描出缝隙,调用image模块的find_lines()函数,入口参数为threshold,theta_margin,rho_margin,roi。`threshold`控制从霍夫变换中监测到的直线。只返回大于或等于阈值的直线。应用程序的阈值正确值取决于图像。即直线的像素大小大于等于1500.theta_margin为直线角度,rho_margin为直线半径,如果扫描出来的直线角度和半径相差小于边际值,则合并两条直线,此处设置为25个像素点,roi是设置颜色识别的视野区域,roi是一个元组,roi=(x,y,w,h),代表从左上顶点(x,y)开始的宽为w高为h的矩形区域,roi不设置的话默认为整个图像视野,此处设置为(150,20,20,200),也就是中心区域,初始化一个blobs对象,用于存储直线的信息。用一个for循环,对一张张图像进行处理,当直线的角度偏移角小于20度时,将直线的数据发送给主控板,此处用到了theta()函数,用于测量直线角度,write()函数,用于向串口写数据。然而,blobs存储的数据类型为dict,所以要导入json模块的dumps()函数,用于将dict类型的数据转成str,因为如果直接将dict类型的数据写入json文件中会发生报错,因此在将数据写入时需要用到该函数。

本实施例可以作为实施例1-4实施过程中对具体硬件的编程方法。

本发明可以达到如下技术效果:通过高效的控制方法,控制机械手掌或书夹等用于取放书的机械结构精确地旋转一定角度,使得机械手掌或书夹可以与所要取放的书本或位置平行,使得书夹可以准确地插入书本之间的缝隙当中,完成取放书操作。总之,通过本发明,书夹等用于取放书的机械结构的角度可以与书本的摆放相匹配,在能准确地取放书的基础上避免了机械结构对书本的损坏。

以上是对本发明的较佳实施进行了具体说明,但对本发明创造并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做作出种种的等同变形或替换,这些等同的变形或替换均包含在本申请权利要求所限定的范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1