统一部件组仿人格斗机器人主要由人形机身和底盘两部分构成,人形机身通过电源接口与底盘相连接。底盘移动速度快、运动精准、双机械臂可模块化快速拆装、并带有机械离合和过流双重保护。可进行体感操作完成各项任务,通过独特算法执行某向特定任务,也可使用动作编辑器编辑机器人相应动作,满足体感人机交互系统设计、底盘移动协同控制。
接下来我们将从此机器人机械结构上特点,算法,策略创新,反思和建议来进行介绍。
5 二维码识别功能
树莓派背包并不能自动执行内置的二维码扫描程序,需要手动设置开机自启程序连接好外设后,打开机器人电源,需要等待约一分钟,树莓派系统才能正常启动。待系统启动后,双击桌面上的“sys_start.sh”,选择“打开”文档里面输入下面两行代码:
cd/home/pi/Downloads/auto#此行意思是进入到我们的工作文件夹下
python3 Scratch.py#此行意思是以python3运行scratch.py
保存并退出后,重启树莓派即可,重启后,屏幕中间出现摄像头图像,证明设置自启成功。
二维码识别物体,定位在机器人视觉领域是非常常见的功能,配备了二维码识别功能的智元素机器人可以快速打击正确的敌人。二维码识别共有两个步骤:
(1)找到二维码
(2)识别二维码所包含的内容
5.1 定位二维码位置
定位一张图片中的二维码需要以下几个小步骤:
(1)将图像转化为灰度图像
(2)使用OpenCv自带的Sobel算子进行过滤
Sobel算子是一种常用的边缘检测算子,是一阶的梯度算法;对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高;当对精度要求不是很高时,是一种较为常用的边缘检测方法。常见的应用和物理意义是边缘检测。
Sobel算子依然是一种过滤器,只是其是带有方向的。在OpenCv-Python中,使用Sobel的算子的函数原型如下:
dst=cv2.Sobel(src,ddepth,dx,dy[,dst[,ksize[,scale[,delta[,borderType]]]]])
前四个是必须的参数:
第一个参数是需要处理的图像;
第二个参数是图像的深度,-1表示采用的是与原图像相同的深度。目标图像的深度必须大于等于原图像的深度;dx和dy表示的是求导的阶数,0表示这个方向上没有求导,一般为0、1、2。其后是可选的参数:ksize是Sobel算子的大小,必须为1、3、5、7。scale是缩放导数的比例常数,默认情况下没有伸缩系数;delta是一个可选的增量,将会加到最终的dst中,同样,默认情况下没有额外的值加到dst中;borderType是判断图像边界的模式。这个参数默认值为cv2.BORDER_DEFAULT
(3)将过滤得到的X方向像素值减去Y方向的像素值。
(4)先缩放元素再取绝对值,最后转换格式为8bit型。
(5)均值滤波取二值化
(6)连续开闭运算
(7)FindContour提取边界
(8)计算出边界最小包围正方形,即可定位。
5.2 识别二维码内容
识别二维码内容我们选择zbar这个库,和PIL。
将二维码放在摄像头前,可以看到定位和识别的结果了。
用Sobel算子计算x,y方向上的梯度,之后在x方向上减去y方向上的梯度,通过这个减法,我们留下具有高水平梯度和低垂直梯度的图像区域。
blurred=cv2.blur(gradient,(9,9))
(_,thresh)=cv2.threshold(blurred,195,255,cv2.THRESH_BINARY):去除图像上的噪声。首
先使用低通滤泼器平滑图像(9 x 9内核),这将有助于平滑图像中的高频噪声。低通滤波器的目标是降低图像的变化率。如将每个像素替换为该像素周围像素的均值。这样就可以平滑并替代那些强度变化明显的区域。然后,对模糊图像二值化。梯度图像中不大于90的任何像素都设置为0(黑色)。否则,像素设置为255(白色)。