从零构建板球控制系统:PID算法与视觉定位实战
1. 板球控制系统入门指南第一次听说板球控制系统时你可能和我当初一样充满好奇这个小玩意儿到底是怎么工作的简单来说它就是一个能自动控制小球在平板上运动的智能系统。想象一下你把一个白色小球放在黑色平板上系统就能让小球乖乖地按照你设定的路线移动是不是很神奇这个系统主要由三部分组成眼睛摄像头、大脑单片机和肌肉舵机。摄像头负责看小球的位置单片机进行运算处理舵机则根据计算结果调整平板的倾斜角度。我在实验室里搭建的第一个原型用的就是最常见的硬件组合山外MK60单片机、鹰眼摄像头和S-D5舵机总成本不超过500元。选择这些硬件可不是随便决定的。MK60单片机有足够的计算能力处理图像和PID运算鹰眼摄像头帧率高、延迟低能准确捕捉小球的运动S-D5舵机扭矩适中响应速度快。这里有个小技巧平板一定要选哑光表面的我试过亮面亚克力板反光太严重会影响图像识别。2. 视觉定位的核心技术2.1 特征检测圆算法实战要让系统看见小球最关键的就是图像处理。我尝试过几种方法最终选择了特征检测圆算法因为它计算量小在单片机上也能流畅运行。这个算法的核心思想很简单找白色物体判断它是不是圆形。具体实现时我先把摄像头采集的图像二值化处理变成纯粹的黑白图像。然后逐行扫描遇到白色像素就开始计算连续白点的数量。当横向宽度符合小球直径范围时再纵向检查高度。最后还要验证四个角点是否为黑色确保检测到的是圆形而非方形。// 小球识别核心代码片段 if(n xRMin n xRMax){ // 计算圆心坐标 site-x 8 * (w-i1) e n / 2; site-y h - i (ei)/2; // 圆形验证 if(!((img[a][(n)/8](7-(n)%8)) 0x01)) continue; return 0x01; // 找到小球 }2.2 霍夫变换的取舍在前期调研时我也考虑过霍夫变换这种更高级的圆形检测方法。它在复杂背景下确实更稳定但计算量太大我们的单片机根本吃不消。实测下来处理一帧图像要500ms以上完全达不到实时控制的要求。所以除非你用树莓派这类性能更强的硬件否则还是推荐特征检测圆这种轻量级算法。3. PID控制算法详解3.1 基础PID原理PID控制是自动化领域的经典算法由比例(P)、积分(I)、微分(D)三部分组成。你可以把它想象成开车时的三种操作P就像看到红灯立即踩刹车I会记住这个路口经常有红灯提前减速D则根据车速变化趋势预判是否需要刹车。在板球系统中我们需要两个PID控制器分别控制X轴和Y轴。当小球偏离目标位置时PID算法会计算出需要倾斜的角度通过舵机调整平板。我刚开始调试时只用了P参数发现小球总是在目标位置附近来回晃动这就是典型的过冲现象。3.2 串级PID的进阶应用单级PID很难同时保证响应速度和稳定性所以我升级为串级PID结构。这个设计很巧妙外环位置环负责要去哪内环速度环负责怎么去。实测下来系统的抗干扰能力明显提升即使突然拨动小球它也能快速恢复稳定。调试串级PID有个重要技巧先调内环我的步骤是固定位置环输出为0专注调试速度环让小球在平板上自由滚动调整参数使其快速静止最后再调试位置环让小球能准确到达目标点// PID参数设置示例 double kp 0.22, ki 0.00, kd 0.35; // 位置环 double skp 4.30, ski 0.0, skd 2.20; // 速度环4. 系统集成与调试技巧4.1 硬件组装要点机械结构对系统稳定性影响很大。我的经验是万向节一定要安装在平台正中心两个舵机对称分布在相邻两边。连接杆长度要精确测量确保平板倾斜角度与舵机转动成线性关系。有个容易忽略的细节所有连接件必须紧固我用热熔胶固定了关键节点防止运行时产生晃动。4.2 软件调试实战调试过程可谓痛并快乐着。最头疼的是小球识别不稳定后来发现是环境光干扰。解决方法很简单加个遮光罩或者像我一样在晚上调试。PID参数调试更是个耐心活我记录了每个参数的调整效果参数调整方向系统反应推荐值Kp增大响应变快但易震荡0.22Kd增大抑制震荡但响应变慢0.35Ki增大消除静差但可能积分饱和0.04.3 进阶功能实现基础功能稳定后我增加了轨迹跟踪功能。通过预设坐标点序列小球可以走出直线、方形等路径。这里要注意两点一是点间距不能太大否则小球容易失控二是要在程序中做好积分分离避免远距离移动时积分项饱和。// 轨迹控制代码片段 switch(myTask){ case line: xSitePid.Set ballMotionLine[count%2].x; ySitePid.Set ballMotionLine[count].y; break; case square: xSitePid.Set ballMotionSquare[count%4].x; ySitePid.Set ballMotionSquare[count].y; break; }记得第一次看到小球乖乖沿着方形路径运动时那种成就感真是难以形容。虽然过程中踩过不少坑比如小球经常飞出台面、PID参数调了又调但最终稳定运行的那一刻所有的努力都值得了。建议你也动手试试从最简单的单点稳定开始逐步增加难度这样的学习曲线最合理。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2600603.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!