描述
<div>
<h3 style="line-height:1.8;">* 1、项目功能介绍</h3>
<hr>
<p> 项目名称:基于STM32F407VET6的智能目标随动系统</p>
<p> 项目背景:本项目设计并实现了一套低成本、高精度的智能目标随动系统。系统以 STM32F407VET6 作为实时控制核心,结合树莓派作为视觉处理单元,通过摄像头获取图像并运行目标检测/跟踪算法,驱动双轴云台对目标进行实时、平稳的跟踪与控制。适用于安防监控、自动拍摄、智能玩具等需要自动跟踪移动目标的场景,能显著降低人工操作成本并提升目标保持的稳定性与可靠性。</p>
<p> 解决问题:在安防、消费级摄像、智能交互设备等领域,目标跟踪往往要求对移动目标进行长时间、连续且精确的跟踪。传统人工控制易疲劳、响应慢、且在复杂场景下容易丢失目标。引入嵌入式视觉与实时控制的结合,能实现自动化、智能化跟踪,从而提升监控覆盖、自动拍摄效果与用户体验。</p>
<p> </p>
<p><img src="//image.lceda.cn/pullimage/ut2ObIupdds6ePM3c5Wn3PNEhrClbqpeNoBOq8X3.jpeg" width="609" height="457" alt="ut2ObIupdds6ePM3c5Wn3PNEhrClbqpeNoBOq8X3.jpeg"></p>
<p style="line-height:1.8;"> </p>
<h3 style="line-height:1.8;">*2、项目属性</h3>
<hr>
<p><strong>首次公开</strong>:是</p>
<p><strong>原创性</strong>:是(结合了开源技术但整体架构为原创设计)</p>
<p><strong>获奖历史</strong>:无</p>
<p><strong>答辩经历</strong>:无</p>
<h3 style="line-height:1.8;"> </h3>
<h3 style="line-height:1.8;">* 3、开源协议</h3>
<hr>
<p style="line-height:1.8;">GPL 3.0</p>
<p style="line-height:1.8;"> </p>
<h3 style="line-height:1.8;">*4、硬件部分</h3>
<hr>
<p>硬件部分</p>
<p>></p>
<p><strong>4.1 :系统结构</strong></p>
<p><img src="//image.lceda.cn/pullimage/N6FJfjeMjs8ldP5TwOMeZncX7QJvhQ5UQkxe0Pjr.png" width="402" height="280" alt="N6FJfjeMjs8ldP5TwOMeZncX7QJvhQ5UQkxe0Pjr.png"></p>
<p>主控:STM32F407ZET6</p>
<p>控制:2个42步进电机</p>
<p>视觉模块:树莓派,摄像头</p>
<p>将系统分为4个基本模块,包括主控模块、电控模块、视觉模块.</p>
<p> </p>
<p><strong>4.1.1 :主控模块</strong></p>
<p> STM32F407ZET6</p>
<p><strong>4.1.2 :电控模块</strong></p>
<p><strong> </strong>使用42步进电机与A4988驱动器。</p>
<p><img src="//image.lceda.cn/pullimage/z0Lt9YpvZv95kQTTZbfDkFlif0dvWuNhluFrWFdJ.png" width="239" height="309" alt="z0Lt9YpvZv95kQTTZbfDkFlif0dvWuNhluFrWFdJ.png"><img src="//image.lceda.cn/pullimage/btlxKuEuRKVzPc2qPvwDMpZ8ZLY3ThMTaT9M1BES.png" width="240" height="215" alt="btlxKuEuRKVzPc2qPvwDMpZ8ZLY3ThMTaT9M1BES.png"></p>
<p style="line-height:1.8;"> </p>
<p style="line-height:1.8;"><strong>4.1.3 :视觉模块</strong></p>
<p>树莓派较强的CPU和GPU,可以处理复杂的数据和算法。这对于矩形框识别和激光光点的位置跟踪是重要的。</p>
<p>功耗和散热:相比于OpenMV,树莓派在长时间运行时更好的散热措施使得其更稳定。</p>
<p>对于此项目,需要进行实时的图像处理和激光光点位置的精确识别,树莓派拥有强大处理能力和灵活性使其能够处理更复杂的图像识别算法,是一个好的选择</p>
<p><img src="//image.lceda.cn/pullimage/Tdcbm9OZPz5tkVih5OWxIndZHjycd3NoN0qUxPgW.jpeg" width="215" height="287" alt="Tdcbm9OZPz5tkVih5OWxIndZHjycd3NoN0qUxPgW.jpeg"></p>
<p> </p>
<p><strong>4.2 :机械结构</strong></p>
<p><strong><img src="//image.lceda.cn/pullimage/uJy1nYyqG8ssUZZ5bdzs8QkYQYFRKAMTGmHHb4xT.jpeg" width="261" height="349" alt="uJy1nYyqG8ssUZZ5bdzs8QkYQYFRKAMTGmHHb4xT.jpeg"></strong></p>
<p>采用铝型材构成十字架结构,可以更加稳定的固定较重的步进电机.</p>
<p>我认为,这个机械结构非常的简单,但是软件的pid的算法,与视觉的矩形识别才是最重要的.</p>
<p> </p>
<p><strong>4.3控制板原理图</strong></p>
<p><strong><img src="//image.lceda.cn/pullimage/oVwhgwdystVzSGepIXIOEuHpFOV6uMNuOMk8A44c.jpeg" width="619" height="435" alt="oVwhgwdystVzSGepIXIOEuHpFOV6uMNuOMk8A44c.jpeg"></strong></p>
<p>这个就是那个黑色板子的原理图,经过再三修改,应该是没有问题了,如有疏漏,恳求原谅.</p>
<h3 style="line-height:1.8;">*5、软件部分</h3>
<hr>
<p>工程结构</p>
<p>/</p>
<div>
<div><strong>5.1 视觉模块</strong></div>
<div> </div>
<div>因为我们需要去识别激光点,如果曝光过亮,那么激光点的颜色hsv与lab阈值就会变的非常的难进行识别,所以我们一开始就锁定曝光与白平衡,以此稳定激光点的识别</div>
<div> </div>
<div><img src="//image.lceda.cn/pullimage/rtyEkX1DQ2fct7jT6SlmiMlxt97sJtnzw3vmeieb.png" alt="rtyEkX1DQ2fct7jT6SlmiMlxt97sJtnzw3vmeieb.png"></div>
<div> </div>
<div>因为矩形框可能出现在摄像头图像中的任何位置,又因为最开始红色激光点的中央一定为摄像头的中央,所以就以激光点为中心进行校准,以这个激光点为坐标系的原点构建坐标系,以此来为矩形四个顶点的位置进行固定以及确认.</div>
<div><img src="//image.lceda.cn/pullimage/LSbQoUD8ykqNX2guLGHk4D7mTMZkc2wt2VeZxglF.png" width="445" height="390" alt="LSbQoUD8ykqNX2guLGHk4D7mTMZkc2wt2VeZxglF.png"></div>
<div> </div>
<div> </div>
<div>这些为矩形识别的部分主要功能源代码,因为摄像头是固定的,而且环境很理想,几乎没有其他类似矩形框的干扰,所以并没有给矩形框的识别加过多的限制,即可稳定识别矩形框.</div>
<div>
<p><br>流程:<br>将图像灰度化并高斯模糊;<br>使用 Canny 边缘检测提取轮廓;<br>形态学闭运算连接断裂的边界;<br>使用 cv.findContours 查找轮廓;<br>使用 cv.approxPolyDP 筛选出近似矩形的轮廓;<br>过滤掉面积过小的噪声矩形;<br>对矩形进行去重 (deduplicate_rects),防止重复识别;<br>选取最大矩形作为目标区域;<br>绘制矩形边界并计算顶点与边中点的坐标(相对原点的偏移量)</p>
</div>
<div><img src="//image.lceda.cn/pullimage/4g9oYSvFYGgUNxonzJ0tVhfnsodLZiABXPawEa0y.png" width="440" height="542" alt="4g9oYSvFYGgUNxonzJ0tVhfnsodLZiABXPawEa0y.png"></div>
<div> </div>
<div>当树莓派识别到矩形框并稳定识别后,需要将矩形框的四个顶点,然后将这四个顶点的相对坐标发到stm32f4进行处理.我用的是串口发送这是很常用的通信方式,也是最简单可行的通信方式,在此不进行过多的赘述.附上关键源码:</div>
<div> </div>
<div>数据格式:<br>起始帧:[0x12, 0x2C]<br>坐标数据:以符号位(0/1)+ 三位数值形式打包<br>结束帧:[0x5B]<br>协议响应:<br>接收到 'd1':发送目标矩形顶点与边中点坐标;<br>接收到 'd2':发送红色与绿色激光坐标;<br>发送函数:send_frame(payload) 负责打包并写入串口。</div>
<div><img src="//image.lceda.cn/pullimage/ZXaOqkhqds0XQRN6EWcTRO1oH7RsCsiZmv8IlUgc.png" width="517" height="533" alt="ZXaOqkhqds0XQRN6EWcTRO1oH7RsCsiZmv8IlUgc.png"></div>
<div> </div>
<div>此为识别的效果图,中间的红点即为红色激光点</div>
<div><img src="//image.lceda.cn/pullimage/7G1dv2CRAeyTc7dEQ0ka2sm1K0jCLz3SfdDHXeNP.jpeg" width="483" height="645" alt="7G1dv2CRAeyTc7dEQ0ka2sm1K0jCLz3SfdDHXeNP.jpeg"></div>
<div> </div>
<div><strong>5.2 STM32思想</strong></div>
<div>通过PID进行控制步进电机,当时在网上也找不到步进电机完成这个功能的完美方案,也只能走一步看一步了,最后通过PID调节完成此功能。</div>
<div>思想是,将树莓派发送过来的数据进行处理,四个顶点的坐标,按顺序依次到达。当然可能会不精准,通过不停的加补偿尝试,达到最优效果。</div>
<div> </div>
<div><img src="//image.lceda.cn/pullimage/ieZJHkQNpoLDeIsTvJEpSe2LyybzTbc5Aadue5iq.png" width="946" height="258" alt="ieZJHkQNpoLDeIsTvJEpSe2LyybzTbc5Aadue5iq.png"></div>
<div> </div>
<div>PID算法也是当时跟着视频摸索出来的,效果我觉得已经很完美了,以下是PID的部分主要代码,可以自行参考:</div>
<div><img src="//image.lceda.cn/pullimage/S14hvOGuKdNCR0WWUzHNlnG3HXpoXJNIvM8XKR7y.png" width="1107" height="212" alt="S14hvOGuKdNCR0WWUzHNlnG3HXpoXJNIvM8XKR7y.png"></div>
<p style="line-height:1.8;"> </p>
<p style="line-height:1.8;"> </p>
<h3 style="line-height:1.8;">*6、BOM清单</h3>
<hr>
<p style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;"> <img src="//image.lceda.cn/pullimage/TnYbjeSMB4ooxNCGoSEMorPJNhaXJxO1fDFJL6KA.png" width="1200" height="459" alt="TnYbjeSMB4ooxNCGoSEMorPJNhaXJxO1fDFJL6KA.png"></span></p>
<p style="line-height:1.8;"> </p>
<p style="line-height:1.8;"> </p>
<p style="line-height:1.8;"> </p>
<h3 style="line-height:1.8;">*7、大赛LOGO验证</h3>
<hr>
<p style="line-height:1.8;"> </p>
<p style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;"><img src="//image.lceda.cn/pullimage/m5wrdHpizS0BBQYGThzbEUtpk8ub6UUFei9sZ4U0.jpeg" width="418" height="558" alt="m5wrdHpizS0BBQYGThzbEUtpk8ub6UUFei9sZ4U0.jpeg"></span></p>
<p style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;"><img src="//image.lceda.cn/pullimage/Zq3GkSVCpUAWKbYMZx2kG8OYDRQv8gayMQlqRM6n.jpeg" width="418" height="558" alt="Zq3GkSVCpUAWKbYMZx2kG8OYDRQv8gayMQlqRM6n.jpeg"></span></p>
<p style="line-height:1.8;"> </p>
<p style="line-height:1.8;"> </p>
<h3 style="line-height:1.8;">* 8、演示您的项目并录制成视频上传</h3>
<hr>
<p style="line-height:1.8;"> </p>
<p style="line-height:1.8;"> </p>
</div>
</div>
评论(4)