本作品参与极术社区组织的有奖征集|秀出你的集创赛作品风采,免费电子产品等你拿~活动。
团队介绍
参赛单位:武汉理工大学
队伍名称:自由派攀岩者
指导老师:张家亮 李政颖
参赛队员:张嘉明 岳志飞 彭晓煊
总决赛奖项:Robei杯一等奖
摘要
本团队设计了一种基于Robei EDA工具的自动化仓储货物分拣机器人。利用FPGA进行HSV色彩空间变换实现对多货物的形心定位与追踪,配合多自由度逆运动学分解算法控制机械臂,大幅提高分拣效率。同时利用多传感器融合算法,使分拣机器人可以实现货物条形码识别;人体与工作异常检测;负反馈补光等功能。利用自制的上位机系统可供工作人员实时远程监控机器人工作情况。经过系统架构设计与整体调试,机器人可以满足预期需求,且系统可重构性以及算法可移植性强,通过改善可适应不同的应用环境与需求。
作品实拍
1 项目架构
本项目设计的机器人主要由两个部分组成,分别是图像处理部分与运动控制部分,由于图像与逆运动学分解均需要消耗较多的逻辑资源,同时为了模拟实际的工作环境,当系统出现问题时可以便于排查解决,因此两部分分别用一块单独的FPGA进行控制。图像与控制部分之间通过蓝牙进行无线数据传输,当图像处理完成后,将数据传递给控制部分,传输数据帧包含货物颜色、坐标信息,控制部分通过解析数据帧,来实现对机械臂的控制,完成货物的分拣工作。同时系统也包含了较多的传感器,利用自制的上位机可供工作人员实时监控机器人工作情况,整体架构设计如下图所示。
图像处理部分以及运动控制部分在Robei EDA中的顶层架构如下图所示。
2 算法介绍
2.1 RGB转HSV算法
通常来说,记录及显示彩色图像时,RGB是最常见的一种方案。但是RGB色彩空间注重颜色的合成而将颜色的属性相混合,在图像处理中,如果不均匀改变RGB,会改变亮度和饱和度,由此带来的RGB比例改变甚至会改变色调,也就是受环境光强影响较大,容易由于图像处理部分出错以导致整个系统崩溃。而HSV(Hue, Saturation, Value)是一种比较直观的颜色模型,它将颜色的亮度、色调和饱和度属性分离,因此采用HSV颜色空间来实现颜色的检测效果会更好。
实现转换操作最重要的是除法运算,本实例调用了一个低延迟的移位减法除法器(延迟时间不到两个像素时钟)来实现高速除法,得到h、s的值。最后要注意保证h,s,v三个分量的延迟都一致。用Verilog实现RGB转HSV的流程如下图所示。
根据HSV空间基于区域特征也可以实现对多运动目标中心的稳定定位与追踪,不需要调用RAM的IP核进行边缘处理等操作,节约资源。
2.2 逆运动学分解算法
在得到了货物坐标后,下一步就是如何控制机械臂对相应坐标的货物进行抓取了。由最终计算结果可知,实现开平方函数、反正切函数、反正弦函数和反余弦函数再结合除法器模块即可实现机械臂根据色块形心坐标抓取色块。所以后面主要对这两个函数模块进行介绍。
2.2.1 反三角函数——基于CORDIC算法的迭代位移算法
CORDIC算法的几何原理为在XOY坐标系中点P1绕原点旋转θ后得到点P2。
在XOY坐标系中点P1(x1, y1)绕原点旋转后得到点P2(x2, y2),则P1和P2两点的坐标关系为:
利用该算法进行迭代时,最终的迭代公式为:
设置迭代次数为16,人为设置x0=Πcosθi,y0=0,然后根据角度θ即可得到cosθ=x16,sinθ=y16,arctanθ=z16。此时已实现反正切函数,再逐次逼近即可得到反正弦、反余弦函数。经过16级迭代,结果已与真实值非常接近。由此已经可以得到反正切值,为了实现输入正弦值输出对应反正弦值,在0到90°的范围内由低到高遍历角度计算其正弦值,当其正弦值增大至大于等于输入正弦值时,取此时的角度为反正弦值。同理可以实现输入余弦值输出对应反余弦值。实验测试结果如下:
2.2.2 开平方函数——逐次逼近算法
首先数据输入data[7:0],接着设置实验值D_z[3:0]和确定值D_q[3:0],然后按照从高往低的顺序,依次将每一位置1,再将实验值平方后与输入数据比较,若实验值的平方大于输入值,则此位为0,反之此位为1,以此迭代到最后一位。这是一种比较常见的算法,简单好用。
3 总结与感悟
通过第五届全国大学生集成电路创新创业大赛Robei杯,我们团队每个人都学到了非常多。在项目初期,我们对Robei杯进行了调研,了解到Robei EDA工具是一种全新的面向对象的可视化芯片设计软件,可以支持基于Verilog语言的集成电路前端设计与仿真。在以前我们使用的FPGA开发软件大多都是Quartus和Vivado,国产EDA软件少之又少,而且从来没有接触过国产相关的EDA软件。Robei EDA软件令我们眼前一亮,非常直观的UI界面很吸引我们。在FPGA这种非常注重层次架构设计的领域,直观的模块设计、连线对开发的帮助非常大,其次是在当今数字IC设计EDA软件被国外垄断的情况下,国产Robei EDA软件的出现,为中国数字IC设计贡献出了非常大的一份力,我们非常的敬佩,因此毅然决定选择Robei杯。
项目进行的过程中遇到过不少问题,在项目初期的时侯FIFO模块始终无法正常运行,最后我们通过使用Robei中的仿真功能,对读写时序一点点地进行查看,一点点地解决时序错误的问题,最后终于实现利用FIFO对SDRAM进行读写的功能。在此之后我们也深刻认识到Robei杯赛是非常注重底层协议开发的。(毕竟用不了IP核)
中后期阶段,为了进一步优化系统,提高作品的水平,我们去研究了机械臂的逆运动学,希望可以做到能让机械臂对任意位置的货物进行抓取。开发过程非常的艰辛,因为传统的逆运动学分析需要进行大量的浮点运算,多使用嵌入式设备进行,基本很难查到使用FPGA进行逆运动学分解控制机械臂的资料,所以我们通过分析传统逆运动学分析的C语言代码,一步一步利用Verilog语言进行编写,并利用Robei EDA的仿真功能对每一步转换出的数据进行分析,自己编写并调用了很多三角运算与除法运算模块,最后终于实现逆运动学分解算法,使机械臂可以抓取范围内任意坐标的货物。
最后非常感谢小组的每个成员,为了完成这次比赛大家都花了非常多的时间与心血,当看到整个系统能按照预期运转,我们真的都非常欣慰。这是一次难忘的经历,感谢Robei,感谢指导老师,也感谢每一个为之付出过努力的成员们,受益颇多!
写给想要参加下一年Robei杯的同学
Robei杯与其他的杯赛有个很大的区别,相信认真审过题目的同学就会知道,他不允许使用任何的软硬核,相当于你的所有工作,都是必须要在Robei EDA上用纯Verliog独立编写完成。这个规则说好也好,说不好也不好,看你如何去理解了。
禁用这些软硬核,最实质的感受是,开发变麻烦了,但是也非常锻炼你的底层开发能力...涉及图像处理的话,免不了要对DDR或者SDRAM进行读写,FIFO的IP核不能调用怎么办?RAM的IP核不能调用怎么办?PS端绕不过去怎么办?只能自己想办法,或者自己去写。但是从另一个角度想,这种规则其实会限定一个比赛的上限,也就是能实现的功能是有天花板的,只要你能无限接近这个天花板,并且设计的机器人功能、前景足够新颖,你的成绩就一定不会差。加油!
作品内容来源于自由派攀岩者,转载请标明出处。欢迎大家参加极术社区组织的有奖征集|秀出你的集创赛作品风采,免费电子产品等你拿~活动,10月1日截止~