中国高校智能机器人---魔方机器人经验帖

10 篇文章 1 订阅
2 篇文章 1 订阅

前述:这个项目从寒假放假开始做,在学校里面待了七八天,把机械结构搭好,初始代码有一个雏形,开学之后断断续续的总共做了一个月左右,最后结果比较悲情,结果上传后,很遗憾大佬太多(或是比赛自身公允度也值得怀疑。。。。),但我们自己做的确实较菜,提交的视频是双臂运行了52S。最后是被淘汰的,无缘进入决赛。但对于个人来说,东西是做出快来了,我已无愧。

地址:https://github.com/shuiyihang/CubeSolve

背景:老师推荐这个比赛的时候,我已经大三了,之前说过,不想再参加任何比赛了,比赛玩几次还行,可以锻炼受压能力,但是一直做,其实对于新东西学习很有时间限制,但是看见有魔方机器人的项目,就决定再做一次吧。原因我觉得有三个,其一:那段时间在学习python,树莓派和opencv,就想做一个实际项目吧。其二:没选择其他的如格斗,擦窗之类的,是觉得必须要有一个严格的“界限”,对于魔方来说,做出来就是做出来,必须要把魔方还原才算做出来,但是擦窗,格斗是没有什么硬性指标的[对于我自己来说,是想检验一下这三年有没有能力真正的完成一件事情],其三:就是大一时间看见过别人的解魔方视频,当时是颇为震惊的,想自己来试试。

大体结构:

机械结构,采用最简单的双臂形式

 

控制上面考虑到要图像处理,两种解决方案,一种openmv[需要另行购买模块],另一种opencv,我那时候刚在咸鱼上收购了一个树莓派3B+,所以没多想选择了opencv,语言就选择使用python[确实事半功倍的效果]

双臂魔方机器人的难点:

这个你一定要重视,上面看完,你觉得:哦,似乎没什么难度哈。但许多东西是你做起来才发现问题的。

1:最大的问题,就是双臂的机械结构,从图上可以看到,我们使用的是标准铝型材,搭了两个45角,自以为巧妙无比,但运行过程中,总会发生手臂碰到魔方的问题,因为使用的是步进电机,只要一碰到魔方,步进电机就会失步,达不到位置,后面就全乱了,魔方夹子在某宝上面购买的,设计的颇为让人费力,后期用电磨不断加工,只为了让舵机张到最大时候,旋转时候夹子不会碰到魔方,但其实这里也有两种方案,一种自己3D打印[看自己工具情况吧],一种是不需要加工夹子,在夹子上面的滑轨上面加长的硬性塑料[受力不会弯曲,不然夹不住魔方],或者要是能搞到铁片也好,再把夹子的抓手固定到塑料或铁片上,可以加大舵机最大角度时候抓手之间的距离,确保夹子肯定不会打到魔方。

2:魔方每个面颜色识别处理,没做的时候无非觉得只是,opencv腐蚀,hsv值比较一下就行了,太简单化问题了。。。

实际问题总是要比理论麻烦,摄像头受光照等等影响,我们直接用的树莓派自带的CSI,10几块钱,中午时候采集的图像很清楚,颜色识别也几乎全对,但是总存在不确定性,要知道一个错,就没有解法的。尤其红色和橙色的H值是很接近的,总会造成误判,这里建议大家使用图片中的标准魔方,颜色还是比较正确的,刚开始借舍友的这种魔方,红色和橙色总是傻傻分不清。

其他:剩下的则是一些小问题了,比如抓手必须要贴上一些加大摩擦力的东西,我们使用的是海绵,效果还不错[砂纸也使用过,对魔方不太好],还有一个特别的问腿,我们结构看起来夹子是绝对在一个面上的,但是转动起来的时候[因为我们不是采用的加薄板方案,所以有这个问题,否则略过即可],会偏,后来,队友奇想,把一个手臂用手向一边掰弯,竟然好了!!。。。

过程:

说一下过程吧,因为想着要考研[成电等我!!],在上一年,便把keil之类等等全卸载了,电脑上只留了一个Arduino的编辑器,确实好用方便,寒假留校期间,没有使用树莓派[比较金贵,东西没调好之前怕搞坏了没使用,还有就是没想好怎么使用,电脑远程又没网,不舍得开流量。。。一开始想的是先用C写,完了之后移植到python上,设置为树莓派开机自动启动],这里介绍一下魔方解决算法kociemba,在GitHub上面开源,需要研究源码或是pip安装的了解下,外人以为魔方是一步一步边走边算的,其实是错的,它根据各面信息在最开始便得到过程,剩下则是电机互相配合把它动作出来的问题了。

在校七八天内,等着买的铝材料回来时候,在写电机根据kociemba得出的结果之后的动作,大致想法是把结果字符串分离成一个个字符,再判断字符情况,根据双手目前颜色情况[颜色就在手中,不需要步进电机旋转],与目标颜色相差多少度等等。。。

最后等架子搭起来的时候,因为抓手无法夹着魔方[摩擦力不够],又因为要回家了,就模仿着,单步在Arduino上,根据串口反馈的结果,我自己双手走了一遍,似乎没错误就先这样了

开学来的时候,考虑树莓派用来处理图像,Arduino负责电机动作[因为有完美的servo库和pwm输出,只使用树莓派,要自己配置电机驱动。。。],但这样就要考虑两个之间通信,IIC或者是串口,IIC只能发送字符 ,而我想要的是可以发送字符串[ok,yes之类],后来使用串口,但是两个控制器的串口通信似乎存在不同步问题,这样把指令给Arduino就要费很长时间。所以又放弃这个想法,还是使用单一树莓吧,解决远程[手机或者电脑连接pi],就直接上树莓派了,这里要说一下opencv安装问题,因为树莓派安装cv3的时候需要编译[我在宿舍用了整整一天],后来不知怎么崩了,无法调用,心血全废了。。。。。所以这里建议大家[务必]使用cv2,只需要pip一下,安装也就40分钟左右,对于颜色识别已是足够,只在某些函数调用上面,cv2与cv3相比可能多一些参数。

使用pi的时候,因为怕python加持,很多问题都简单了,在Arduino上比如结果分离成字符的函数需要自己写,在python上面有现成的,一句话的事情,结果也没有移植当初Arduino上的代码,因为觉得写的麻烦了,这里有一个想法:算法是什么?算法是节约空间和时间的,当没有或者是可靠的算法的时候,放弃空间或许可以换来时间和代码可靠性,想来魔方可能情况不多[左右手颜色组合情况],于是就做了一个python里面的字典映射,每种情况对应一种动作,虽然空间臃肿了,但是效果不错!

本来想的是进入决赛更新颜色识别偏,加上模型训练或者是换摄像头,遗憾止步了,五一开始,早上困的不行,没有去图书馆,一直想更新下博客,趁这个机会补上,代码等有空补上[发GitHub上吧。。],树莓派没在身边

视频里最后结果截屏。。。。

 

 

 

 

OpenCV(Open Source Computer Vision Library)是一款开源的计算机视觉库,专门为图像和视频处理任务设计,广泛应用于学术研究、工业应用以及个人项目中。以下是关于OpenCV的详细介绍: 历史与发展 起源:OpenCV于1999年由英特尔公司发起,旨在促进计算机视觉技术的普及和商业化应用。该项目旨在创建一个易于使用、高效且跨平台的库,为开发者提供实现计算机视觉算法所需的基础工具。 社区与支持:随着时间的推移,OpenCV吸引了全球众多开发者和研究人员的参与,形成了活跃的社区。目前,OpenCV由非盈利组织OpenCV.org维护,并得到了全球开发者、研究机构以及企业的持续贡献和支持。 主要特点 跨平台:OpenCV支持多种操作系统,包括但不限于Windows、Linux、macOS、Android和iOS,确保代码能够在不同平台上无缝运行。 丰富的功能:库中包含了数千个优化过的函数,涵盖了计算机视觉领域的诸多方面,如图像处理(滤波、形态学操作、色彩空间转换等)、特征检测与描述(如SIFT、SURF、ORB等)、物体识别与检测(如Haar级联分类器、HOG、DNN等)、视频分析、相机校正、立体视觉、机器学习(SVM、KNN、决策树等)、深度学习(基于TensorFlow、PyTorch后端的模型加载与部署)等。 高效性能:OpenCV代码经过高度优化,能够利用多核CPU、GPU以及特定硬件加速(如Intel IPP、OpenCL等),实现高速图像处理和实时计算机视觉应用。 多语言支持:尽管OpenCV主要使用C++编写,但它提供了丰富的API绑定,支持包括C、Python、Java、MATLAB、JavaScript等多种编程语言,方便不同领域的开发者使用。 开源与免费:OpenCV遵循BSD开源许可证发布,用户可以免费下载、使用、修改和分发库及其源代码,无需担心版权问题。 架构与核心模块 OpenCV的架构围绕核心模块构建,这些模块提供了不同层次的功能: Core:包含基本的数据结构(如cv::Mat用于图像存储和操作)、基本的图像和矩阵操作、数学函数、文件I/O等底层功能。 ImgProc:提供图像预处理、滤波、几何变换、形态学操作、直方图计算、轮廓发现与分析等图像处理功能。 HighGui:提供图形用户界面(GUI)支持,如图像和视频的显示、用户交互(如鼠标事件处理)以及简单的窗口管理。 VideoIO:负责视频的读写操作,支持多种视频格式和捕获设备。 Objdetect:包含预训练的对象检测模型(如Haar级联分类器用于人脸检测)。 Features2D:提供特征点检测(如SIFT、ORB)与描述符计算、特征匹配与对应关系估计等功能。 Calib3d:用于相机标定、立体视觉、多视图几何等问题。 ML:包含传统机器学习算法,如支持向量机(SVM)、K近邻(KNN)、决策树等。 DNN:深度神经网络模块,支持导入和运行预训练的深度学习模型,如卷积神经网络(CNN)。 应用领域 OpenCV广泛应用于: 科研与教育:作为计算机视觉教学和研究的基础工具,OpenCV简化了算法原型开发与验证过程。 工业自动化:在视觉检测、机器人导航、产品质量控制等工业场景中,OpenCV用于实时图像分析与决策。 安防监控:用于人脸识别、行人检测、行为分析等智能监控系统。 医疗影像分析:在医疗领域,OpenCV可用于医学图像处理、病灶检测、诊断辅助等应用。 自动驾驶:在车辆视觉感知系统中,OpenCV用于道路标志识别、障碍物检测、车道线识别等任务。 多媒体应用:如图像编辑软件、AR/VR应用、游戏开发等,利用OpenCV进行图像和视频处理。 物联网与嵌入式系统:在资源受限的嵌入式设备上,OpenCV提供轻量级的计算机视觉解决方案。 学习与社区资源 OpenCV拥有丰富的官方文档、教程、示例代码以及活跃的开发者社区,包括GitHub、StackOverflow、官方论坛等,为学习和使用OpenCV提供了有力支持。此外,有许多书籍、在线课程、博客文章和研讨会专门讲解OpenCV的使用和计算机视觉技术。 综上所述,OpenCV作为一款功能强大、高效、跨平台且开源的计算机视觉库,为开发者提供了实现各类图像和视频处理任务所需的工具箱,其广泛的应用领域和活跃的社区支持使之成为计算机视觉领域不可或缺的开发工具。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值