引言最近偶然在社交媒体上刷到了新一届的工创赛现在自己已经大四临近毕业由于自己是机械专业学生未来很难再接触到嵌入式的比赛特此发表一下当时的一些制作思路希望能给未来参加该比赛的人提供一些帮助一、整体系统组成1、硬件部分stm32f103zet6系统开发版带显示屏、树莓派、openCV摄像头、openMV摄像头维特智能陀螺仪HWT101、无线串口模块DRV8825步进电机驱动×5四个麦克纳姆轮一块可充电大容量锂电池大扭矩舵机2、机械部分一块定做的碳板、3D打印的若干非标准件、铝型材二、制作思路1、机械部分1.1夹取装置——升降臂机械部分我参考了往年各路大佬的机械结构大体上分为两种一种是和我这种一样的上下的升降结构另一种是更加复杂的机械臂、由于代码水平和能力有限还是选择了第一种结构利用一个舵机控制圆盘转动再加上一个步进电机控制升降结构利用两个同步带轮和一根同步带完成上下的运动1.2底盘以四个麦轮打底、这里麦轮要注意我当时踩了坑如果追求稳定性现在来看 X 形结构可能更好传统的O型结构具有转向快的优势、但是我自己用下来横移时候精准度不如X型结构铝型材作为整体框架地盘加上角件以后可以固定住电机上下放两个亚克力板用于放电池和单片机。其实机械要面临的问题其实很多但是我是主控制的人机械部分我只提供给队友思路这里不过多的赘述了附上一张我当时没有外壳里面的图片2、代码部分2.1上位机opencv、openmv2.1.1OpenMV我当时其实使用openMV并不熟练但是25年物流搬运要扫一个二维码获取信息我的树莓派不知道为什么搭载不了两个摄像头所以额外加了一块MV的摄像头扫二维码然后利用串口来接收二维码的内容2.1.2OpenCV1.物料的识别对于openCV这里很重要主要是在bilibili上和一个博主学了一下基本的使用步骤对于工创赛其实要求并不高我印象中我是利用BGR的设置区分出三种颜色要蓝色就只在图像里面给蓝色的阈值、其他也同理然后加一些滤波算法使效果好一点然后用有一个添加矩形框的函数这是从cv车牌识别的那个经典项目想到的用来找物料的中心点也是基于串口发位置给单片机这里要专门写一个转化的函数因为摄像头只显示像素小车根据与中心的偏移会得到一个横纵的值我自己这里是量取了我的车横移一圈和竖移动一圈的距离然后数学比例计算后换算成实际的脉冲数。2.定位圆盘上的物料我的升降结构没办法夹取移动的物料因此我只在圆盘停止的时候才进行夹取这里CV的处理我是添加了一个位置的函数校准短时间内的物料中心偏移情况大概是0.1秒左右吧圆盘移动过程一定会有偏移利用这一点来确保我在定位微调的时候只会在静止的时机寻找3.与下位机单片机的数据传递这里也是同样采取串口的形式收发数据唯一要注意的就是单片机处理串口的能力有限也可能是我的代码是屎山的原因要想保证程序准确的传输和运行我的摄像头和单片机设置了启停的函数在接收到特定收发信号时候摄像头选择跑空函数或者发送位置信息等处理2.2下位机stm32f103zet62.2.1步进电机这部分我移植了正点原子的步进电机梯形曲线部分由于师承江科大用的一直是标准库这里的移植也花了我不少时间看懂HAL库的函数再转化成标准库函数。梯形曲线或者是其他软起动的曲线是一定要用的不仅能保证最少程度的丢步和发热而且移动会更加准确。四个电机是同步运作的控制旋转的方向来达到横向移动和纵向移动以及转向的目的而且麦轮一定要选一些轮齿少阻力小的要不然带不动2.2.2触摸屏显示程序这部分主要是采用了网上的开源代码做出的调整写比赛需要的函数即可2.2.3陀螺仪定位选用了HWT101这一款我尝试过三四种只有这款处理数据容易而且定位最准基于串口传输和单片机沟通2.2.4串口部分这里我采用了三个串口一个用来接收姿态传感器位置信息数据另外两个接收两个摄像头数据。2.2.5整体思路这里就比较清奇了由于我的代码太复杂和过多的循环在while里面完全跑不通所以我额外加了一个定时器6这个好像没什么主要功能我就把它当成我的定时循环程序了也没有加额外看门狗用了这个方法以后意外的顺利而怎么保证所有的步骤都有条不紊的进行呢这里采用了另一个屎山代码switch case,不断的计数加一没完成一个任务就把标志位加一超长代码但确实有用这里附上一张超长switch的截图哈哈三、总结这次比赛其实做的过程中踩了不少的坑但是经过这次的比赛我能感觉到这部分的能力确实有了巨大的提升最大的遗憾是在无数个调试的夜晚后最后比赛的成绩并不理想记得当时在体育场比赛现场的物料颜色和我们买的有出入现场蓝色物料偏深蓝代码也没有什么保护程序正赛当天场内的顶光产生了影子和物料的深蓝重合了小车第一圈跑到第二个码放处的时候怎么都识别不到摄像头传出了错误的数据直接跑出了场地虽然当时看到很多同赛道的选手也深受困扰但是最后记得公布决赛名单的时候我看到我们组排在27名前26名都可以进决赛比新规则的限时比拼我当时遗憾没有获得那个机会。记忆就像是咖啡兑水只能变淡没办法变成透明的颜色即使过了两年每次回想都会难受借着这次新一轮的工创赛题目发布希望看到这篇博客的朋友能吸取我当时的失败经验优化出更完美的小车这是本人当时的单片机源码仅供参考链接https://pan.baidu.com/s/1_LcAYOiZaMJOykwiXxBbqQ?pwdz9oi提取码z9oi