描述
<div>
<p style="line-height:1.8;"> </p>
<h3 style="line-height:1.8;">* 1、项目功能介绍</h3>
<hr>
<p style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;">请输入内容…</span></p>
<div>
<div>本作品是一套基于**机器视觉 + 五轴闭环运动控制**的全自动拼图装置:用户将打乱的拼图碎片放置在 A4 幅面工作区内,视觉模块自动识别每块碎片的位置、图案与角度,规划搬运顺序后,由"XYZ + 旋转轴"龙门机械手逐块吸取并精确拼放至目标位置,全程无需人工干预。</div>
<br>
<div>系统由 **MaixCAM2 视觉解算端** 与 **STM32F407ZGT6 运动控制端** 两部分组成,核心功能:</div>
<br>
<div>1. **视觉自动定位与解算**:MaixCAM2 摄像头识别工作区内每块拼图的取料坐标、放置坐标与旋转角度(分辨率 0.1mm / 0.1°),单次最多 4 块任务批量下发,附带置信度与优先级;</div>
<div>2. **五轴闭环运动控制**:5 台串口闭环步进电机(Emm_V5 协议)构建 X(龙门双电机同步)、Y、Z(升降两态)、Θ(旋转对齐)四逻辑轴,闭环防堵转,X/Y 定位分辨率 0.1mm,Θ 分辨率 0.1°,龙门双电机通过"命令缓存 + 广播同步启动"保证严格同步;</div>
<div>3. **电磁铁末端执行器**:下压→吸合→提升→平移→下压→释放的标准化拾放流程,吸附/释放各有 200ms 稳定等待,异常时立即强制释放;</div>
<div>4. **14 步标准化搬运序列**:每块拼图固定执行"平移取料点→预旋转→下压→吸附→提升→中间过渡点→转向放置角→平移放置点→下压→释放→提升→回中"动作链,Θ 轴"先转后压"避免碎片刮擦错位;</div>
<div>5. **中线走廊避障算法**(原创):取料点至放置点的直线与 A4 纸 Y 中线(148.5mm)求交生成中间过渡点,约束"上半区取料、下半区放置"沿中线走廊空载移动,杜绝机械手横扫已拼好的碎片区;</div>
<div>6. **二维仿射标定**:相机像素坐标到机械坐标采用实测 ABCD 四角仿射变换映射,纸张与机械轴存在小角度偏差也无需换轴修正,64 位整数运算零累积误差;</div>
<div>7. **完整安全体系**:软限位双检、每条电机指令 ACK 校验、堵转位检测、全套超时保护、坐标失效传染锁、故障锁定(仅断电解锁)、新任务等待旧块完成再生效(绝不截断吸取/放置中间态);</div>
<div>8. **双页彩屏 UI + 事件音系统**:1.3 寸 IPS 彩屏实时显示视觉链路五态、任务进度、计划状态机全景(`RUNNING P2/4 STEP: 7/14`)与故障三要素定位(`ERROR P2 A09 / M3 FD / COMM`);手动页支持三轴绝对坐标编辑与手动吸附;蜂鸣器完成/错误/收令/回零四类事件音排队播放不丢失;</div>
<div>9. **上位机监听通道**:UART5 完整镜像视觉链路双向报文(带 `[cam]:`/`[32]:` 方向标签),现场联调抓包零干扰。</div>
<br>
<div>整机实现"视觉识别→任务解算→计划生成→同步搬运→精确拼放"全自动拼图闭环,单块搬运 12~18 秒,全流程目标 120 秒内完成。</div>
</div>
<p style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;">注:本项目为官方指定赛题复刻类电子设计项目。请描述项目的核心功能,在电路搭建、程序移植、模块适配等方面做了什么、是否复现了赛题要求的全部基础功能;在此基础上进行了哪些拓展升级,解决了什么问题。</span></p>
<p style="line-height:1.8;"> </p>
<h3 style="line-height:1.8;">*2、项目属性</h3>
<hr>
<p style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;">请输入</span></p>
<div>
<div>本项目为**原创项目**,首次在立创开源平台公开;机械结构、硬件电路、嵌入式固件、视觉端程序均为团队自主设计开发;</div>
<div>- 项目曾参加**全国大学生电子设计竞赛**,目前**比赛进行中,暂未获奖**;</div>
<div>- 未曾在其他比赛中获奖,未在学校参加答辩;</div>
<div>- 未参加嘉立创集团其他赛事,符合本次大赛参赛规则;</div>
<div>- 项目按 **GPL 3.0** 协议开源,固件源码、视觉端脚本、硬件工程全量开源,核心功能开源比例 100%。</div>
</div>
<p style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;">内容…</span></p>
<p style="line-height:1.8;"> </p>
<p style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;">注:项目基于官方赛题进行复刻开发,并在此基础上进行功能升级、体验优化与创意拓展; 升级拓展部分:请说明是否首次公开;是否为原创;是否曾经在其他比赛中获奖,若有获奖则叙述获奖详情;是否在学校参加过答辩。 </span></p>
<p style="line-height:1.8;"> </p>
<h3 style="line-height:1.8;">* 3、开源协议</h3>
<hr>
<p style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;">请输入内容…</span></p>
<div>
<div>本项目选择 **GPL 3.0** 开源协议(原创项目推荐协议)。</div>
<br>
<div>- 全部核心功能代码以 GPL 3.0 协议开源:STM32F407 固件(FreeRTOS 任务架构、Emm_V5 电机驱动、视觉协议解析器、拼图计划生成器、仿射坐标变换)、MaixCAM2 视觉识别与解算脚本;</div>
<div>- 使用的第三方开源组件及协议说明:</div>
<div> - FreeRTOS V10.3.1(MIT 协议,ST 官方中间件包);</div>
<div> - STM32 HAL 库(ST BSD-3-Clause);</div>
<div> - 正点原子 ATK-MD0130 屏幕驱动例程(参考开源例程修改,已注明出处);</div>
<div>- 引用内容已在源文件头部注明来源,遵循原作者协议;</div>
<div>- 嘉立创EDA 硬件工程、结构设计文件一并开源,欢迎社区复刻拓展。</div>
</div>
<p style="line-height:1.8;"> </p>
<p style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;">注:利他即利己,请认真阅读下述内容。</span></p>
<ol style="line-height:1.8;">
<li style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;">拥抱开源,赋予项目无限价值。建议项目核心功能开源80%以上;</span></li>
<li style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;">若某一部分功能不可替代且删掉之后项目无法解决对应的问题,则这一部分实现的功能就是项目的核心功能;比如设计了一台电子负载且设计了一款上位机软件监控功率变化,则电子负载为核心功能,上位机软件为辅助功能;比如电子负载中使用了一款隔离485模块与上位机通信,则此485模块实现的通讯功能为辅助功能; </span></li>
<li style="line-height:1.8;"><span style="font-size:14px;color:#95a5a6;">项目应选择适合自己的<span style="text-decoration:underline;"><a href="/posts/98fdb2accd754af7b51990790db3b47a" target="_blank">开源协议</a></span>,若项目引用其他开源项目,应注明来源并遵循原作者的开源协议规定;原创项目推荐使用GPL3.0开源协议;</span></li>
<li style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;">直接引用开源项目的原电路或原代码实现的功能不可作为自己项目的核心功能、使用市场上通用模块直接实现的功能不可作为自己项目的核心功能。</span></li>
</ol>
<p style="line-height:1.8;"> </p>
<p style="line-height:1.8;"><strong><span style="color:#0093e6;">请在竞赛阶段填写 ↓</span></strong></p>
<p style="line-height:1.8;"> </p>
<h3 style="line-height:1.8;">*4、硬件部分</h3>
<hr>
<p style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;">请输入内容…</span></p>
<p style="line-height:1.8;"> </p>
<p style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;"> 注:请前往<span style="text-decoration:underline;"><a href="https://lceda.cn/editor" target="_blank">嘉立创EDA</a> </span>生成/上传设计文件,文件完成后,相关文稿将自动生成至项目详情;这里可以详细说明您的项目实现原理和机制、注意事项、调试方法、测试方法等。推荐图文并茂的形式向别人介绍您的想法。 </span></p>
<p style="line-height:1.8;"> </p>
<h3 style="line-height:1.8;">*5、软件部分</h3>
<hr>
<p style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;">请输入内容…</span></p>
<div>
<div>### 5.1 软件总体结构</div>
<br>
<div>STM32F407 固件基于 **FreeRTOS(CMSIS-OS2)**,5 任务分工:</div>
<br>
<div>| 任务 | 优先级 | 职责 |</div>
<div>|---|---|---|</div>
<div>| VisionTask | AboveNormal | DMA 环形缓冲组行、协议状态机解析与校验、应答相机、任务包入队 |</div>
<div>| MotorTask | AboveNormal | UART4 总线唯一访问者:电机初始化/软原点/逐块执行 14 动作/手动定位 |</div>
<div>| PuzzleTask | Normal | 任务排序、干运行预检、正式计划生成、计划状态机(绝不触碰硬件) |</div>
<div>| StatusTask | Low | 彩屏双页 UI、编码器按键扫描、蜂鸣器事件播放、电机周期扫描 |</div>
<div>| LEDTask | Low | 状态灯心跳 |</div>
<br>
<div>**并发设计**(自研规范,无互斥量/信号量):</div>
<div>- 消息队列(深度 2)整包传递视觉任务,仅 END 校验通过才入队;</div>
<div>- MotorRequest **单槽仲裁**:临界区原子提交/取出,所有运动请求串行化;</div>
<div>- **偶数版本号快照协议**:共享结构写前后各递增一次 version,读端只接受"前后相等且为偶数"的稳定快照,防撕裂读取;</div>
<div>- `osThreadFlags` 事件驱动 + ISR 单生产者/单消费者环形缓冲(1024B)。</div>
<br>
<div>【配图:FreeRTOS 任务与数据流图】【配图:拼图流程状态机图】</div>
<br>
<div>### 5.2 视觉通信协议与校验器</div>
<br>
<div>文本行协议(115200,`\r\n` 行尾,坐标 0.1mm 整数、角度 0.1° 整数):</div>
<br>
<div>```</div>
<div>相机→主控: TASK,<n> 主控→相机: ACK,TASK,<n></div>
<div> P,<id>,<取料x,y,角度>, TASK_OK,<n> (END校验通过且入队成功)</div>
<div> <放置x,y,角度>, ERR,<code>,<detail></div>
<div> <优先级>,<置信度></div>
<div> END READY,STM32 (握手广播,3s周期)</div>
<div> ACK,READY</div>
<div>```</div>
<br>
<div>- **严苛校验器**(状态机 WAIT_TASK→RECEIVING):字段数、严格十进制解析(拒绝空格/小数/科学计数)、ID 查重、坐标/角度/优先级/置信度越界、行数匹配,共 **13 类错误码**(DUP_ID、XY_RANGE、LINE_LONG、RX_OVERFLOW 等),坏数据零下发;</div>
<div>- **韧性链路**:`HAL_UARTEx_ReceiveToIdle_DMA` 256B 循环缓冲 → ISR 环形缓冲 → 线程标志唤醒;UART 错误自动 3s 退避重建会话并重新握手;UI 支持一键提前重连。</div>
<br>
<div>### 5.3 拼图核心算法</div>
<br>
<div>**(1)两级计划生成**</div>
<div>- `BuildPreview()` 干运行预检:无需标定即可生成计划供界面预览;</div>
<div>- `BuildExecution()` 正式计划:强制标定锁,按优先级稳定排序;</div>
<div>- 计划状态机:`WAIT → MAP_LOCK → READY → RUNNING → (PIECE_DONE⇄RUNNING)n → TASK_DONE / ERROR / CANCELLED`。</div>
<br>
<div>**(2)每块 14 步原子动作**</div>
<br>
<div>```</div>
<div>01 MOVE PICK XY 02 ROT PICK Θ 03 Z DOWN 04 MAGNET ON</div>
<div>05 WAIT 200ms 06 Z UP 07 MOVE MID XY 08 ROT PLACE Θ</div>
<div>09 MOVE PLACE XY 10 Z DOWN 11 MAGNET OFF 12 WAIT 200ms</div>
<div>13 Z UP 14 Θ 回 0° 中位 → 末块追加 RETURN ORIGIN</div>
<div>```</div>
<br>
<div>**(3)中线走廊避障(原创)**:`CalculateTransit()` 计算取放直线与 A4 中线 y=148.5mm 交点作为过渡点,仅接受"上半区取料→下半区放置"的跨中线任务,空载移动始终沿中线走廊,不扫过已完成拼图区。</div>
<br>
<div>**(4)二维仿射标定**:`machine = A + (B−A)·px/W + (C−A)·py/H`,实测 A4 四角基向量映射,64 位中间量整数四舍五除,纸张歪斜免换轴修正;结果经软限位二次校验。</div>
<br>
<div>**(5)安全语义**:每块前后双重 Preflight(四轴坐标可信、Z=UP、Θ=0、磁铁释放);新任务只标记"本块结束后取消",绝不截断吸附中间态;ERROR 故障锁仅断电解除;故障定位三要素 `(阶段, 电机地址, 原始应答)` 上屏。</div>
<br>
<div>### 5.4 电机驱动层(Emm_V5 协议)</div>
<br>
<div>- 帧格式 `[Addr][CMD][Data][0x6B]`:使能 0xF3、位置模式 0xFD(含相对/绝对/缓存待同步标志)、广播同步 0xFF66、急停 0xFE98、状态查询 0x3A(bit1 到位/bit2 堵转);</div>
<div>- TTL 五机共线:发送间隔强制 ≥10ms,逐台 ACK 校验,任一失败立即广播停止并置坐标失效。</div>
<br>
<div>### 5.5 开发环境与烧录方法</div>
<br>
<div>- STM32CubeMX 6.x 生成工程 + Keil MDK 5.32 编译,ST-Link SWD 烧录;</div>
<div>- 视觉端:MaixCAM2 使用 MaixPy 开发(识别与解算均在相机端完成);</div>
<div>- 源码结构:`Core/`(CubeMX 层)、`User/App/Tasks/`(五任务实现)、`User/myKU/`(自研驱动:Vision 视觉协议、Motion 轴控制/仿射变换、Puzzle 计划生成器、ZDT_Motor、Magnet、ATK_MD0130、Menu_encoder 等)。</div>
</div>
<p style="line-height:1.8;"> </p>
<p style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;">注:若您的项目涉及软件开发,请在附件上传对应的工程源码。这里可以详细说明您的软件流程图、功能模块框图、相关算法的解释或科普、源码结构、编译环境的搭建和配置、源码编译方法、程序烧录方法等。推荐图文并茂的形式向别人介绍您的想法。</span></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;">请输入内容…</span></p>
<p style="line-height:1.8;"> </p>
<p style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;">注:项目涉及的BOM清单。在<span style="text-decoration:underline;"><a href="https://lceda.cn/editor" target="_blank">嘉立创EDA</a> </span>生成/上传设计文件后,BOM将自动生成至项目详情;建议包括型号、品牌、名称、封装、采购渠道、用途等内容。具体内容和形式应以表达清楚项目构成为准。 </span></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;">请上传包含大赛logo的项目图片,logo以丝印形式印刷在PCB上面。</span></p>
<p style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;">点击zip下载大赛logo标识! <span style="text-decoration:underline;"><a href="https://image.lceda.cn/easyedaResource/images/d1bbfd69f9404f56901a0e7b849b7245.rar" target="_blank">(大赛标识).zip</a></span></span></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;"><span style="color:#95a5a6;font-size:14px;">视频要求:请横屏拍摄,分辨率不低于1280×720,格式Mp4/Mov,单个视频大小限50M内;</span></p>
<p style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;">视频标题:立创电赛:{项目名称}-{视频模块名称};如立创电赛:《自动驾驶》-团队介绍。</span></p>
<p style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;">视频冲榜:项目制作过程中,可随时录制视频上传至B站、小红书、视频号、抖音号,<a style="text-decoration:underline;" href="https://doc.weixin.qq.com/smartsheet/form/1_wpmhMpBwAAfrKELBBSNdSqJrorjTQE8Q_600d71" target="_blank">冲榜人气奖励 ></a>,优秀项目可获得立创官方全域曝光机会;</span></p>
<p style="line-height:1.8;"> </p>
<p style="line-height:1.8;"><span style="font-size:14px;"><a style="text-decoration:underline;" href="/posts/b2b65ad17ac34080a318a5ab47a632c2" target="_blank">前往查看更多详情 ></a></span></p>
<p style="line-height:1.8;"> </p>
</div>
评论(0)