站内搜索
发作品签到
天空星自动羽毛球捡球机器人(2025)
专业版

天空星自动羽毛球捡球机器人(2025)

简介

基于STM32与MaixCAM的羽毛球自动捡拾机器人,YOLOv5视觉追踪+PID电机控制,双模操控,单次收集成功率96%,续航5小时。硬件/软件/机械三端交付。

简介:基于STM32与MaixCAM的羽毛球自动捡拾机器人,YOLOv5视觉追踪+PID电机控制,双模操控,单次收集成功率96%,续航5小时。硬件/软件/机械三端交付。
星火计划2026
复刻成本:1800

开源协议

GPL 3.0

(未经作者授权,禁止转载)
创建时间:2026-07-05 15:17:18更新时间:2026-07-06 10:35:24

描述

1、项目简介

设计一款配备视觉识别技术的麦克纳姆轮机器人。这款机器人采用旁置电机,专为自动捡拾羽毛球而设计。通过集成先进的视觉处理模块,它能够利用YOLO目标检测算法精准快速地识别并定位地面上的羽毛球,自动完成捡拾任务。该机器人不仅能节省运动员捡球的时间和精力,还能让他们将更多注意力专注于技术提升和战术演练,提升训练效率和效果。

该项目为去年做的Demo(本质上是羽毛球爱好的衍生乐趣),目前还存在诸多不足,可以参考想法和架构,但不建议直接复刻。如有错误和改进还请指出,一起学习哈。( • ̀ω•́ )✧
📮:pengywei0307@163.com

2、项目功能

本系统以STM32为主控,配合MaixCAM视觉模块实现羽毛球的实时识别与追踪。视觉模块内置YOLO目标检测算法,通过UART将羽毛球位置信息传输至主控芯片,结合PID算法与A4950电机驱动模块,精准控制520减速电机,驱动麦克纳姆轮底盘完成自主移动与捡拾动作。捡拾机构采用尼龙滚筒刷与收球盒联动设计,当视觉检测到羽毛球距离满足条件时,自动启动旁置电机完成清扫收集。系统支持蓝牙手动遥控,方便用户通过手机实时调整机器人的移动方向。OLED显示屏用于实时反馈电机速度和系统调试参数,提高操作便利性。

(1)手动模式:通过手机对机器人进行透传控制,从而实现手动控制捡球。
(2)自动模式:通过视觉模块的实时目标检测,识别并判断羽毛球位置,驱动相关的机械结构从而实现自动捡球。

3、项目测试

3.1 电机转速测试结果分析

(1)测试流程
a.设备上电,不使用PID算法控制,转速设为0;
b.手动旋转电机,观察OLED显示屏显示当前电机转速;
c.软件使用PID算法,分别设置0和5转速,观察OLED显示屏。
(2)结果分析
OLED正常显示,手动旋转电机,OLED可以读取电机数据,通过公式(电机编码计数*100.0f/30.0f/11.0f/4.0f)显示出电机当前速度;使用PID算法后,电机能够按照指定的速度运行,如果故意干扰,电机也会产生相应的反馈,使得电机转速达到预期值。实物测试结果如图3-1所示。

image.png图3-1 转速0测试
image.png图3-2 转速5测试

3.2 羽毛球目标检测测试结果分析

(1)测试流程
a.设备上电,使羽毛球置入视觉模块识别范围内;
b.观察串口能否读取目标数据。
(2)结果分析
设备上电后,将羽毛球置入视觉模块的识别范围内,串口终端能正常读取目标的位置形式,结果满足预期效果,实物测试结果如图3-3所示。

image.png图3-3 羽毛器目标检测测试

image.png图3-4 串口终端数据读取

3.3 串口数据收发测试结果分析

(1)测试流程
a.设备上电,手机蓝牙调试器连接蓝牙模块,向设备发送信息,查看是否回复;
b.向设备发送不同指令,查看是否按指令运行。
(2)结果分析
设备上电后,手机蓝牙调试器连接蓝牙模块后,手机向设备发送数据能够正常回复;向设备发送前进,后退,左移,右移,左转,右转,扫球和空转指令,均能够正常运作,结果满足预期效果。实物测试结果如图3-5所示。

image.png图3-5 手机蓝牙调试器指令发送

4.硬件设计

该设计的硬件主要采用模块化设计,这里主要展示一下硬件架构和电机驱动。其余参考附件SCH,就不再赘述。

4.1 硬件架构

image.png 图4-1 硬件架构框图

层级核心器件关键参数
主控STM32F407VET6Cortex-M4 / 168MHz / 210DMIPS
驱动A4950 × 4 + 520电机 × 430:1减速比 / 0.35Nm扭矩
底盘麦克纳姆轮全向移动
视觉MaixCAM双核RISC-V / YOLOv5s / 30fps
通信HC-05蓝牙10米 / UART透传
显示0.96寸OLEDI2C / 1000:1对比度
电源DC-DC稳压模块12V输入(18650电池组) / 多路输出

表4-1 硬件架构层级

4.2 电机驱动(A4950模块)

A4950是美国埃戈罗公司生产的一款单H桥电机驱动芯片。因此网上卖的模块多是使用两块芯片以达到可以控制两个直流电机的能力。

★电机驱动电压:8~40V,输出最大电流可达3.5A;
★内置过温保护,短路保护和可选择的过流保护;

image.png图4-2 A4950实物图

引脚名称引脚标号I/O功能
GND1接地
IN22IH桥逻辑输入1
IN13IH桥逻辑输入2
VREF4I逻辑电压和用于限流比较的电压,一般接5V
VBB5电机驱动电压(内部对其处理后供给逻辑电路)
OUT16OH桥输出1
LSS7IH桥的电流控制,可通过一个电阻接地限制电流(不限电流时直接接地)
OUT28OH桥输出2
PAD用于散热

表4-2 A4950引脚功能定义(单芯片,非模块)

(1)H桥的驱动模式
a.正转模式
当Q1、Q4的栅极为高电平,Q2、Q3为低电平时,Q1,Q4导通,如下图所示,电机正向旋转。

image.png图4-3 H桥正转电流走向
b.反转模式
当Q2、Q3的栅极为高电平,Q1、Q4为低电平时,Q2,Q3导通,如下图所示,电机反向旋转。

image.png图4-4 H桥反转电流走向

(2)功能框图
image.png图4-5 A4950功能框图

通过xIN1和xIN2给出四种逻辑组合“00”、“01”、“10”、“11”,从而MOS通断会形成四种输出。逻辑如下:
image.png图4-6 A4950逻辑输出

通过PWM控制后,逻辑如下:
image.png图4-7 A4950的PWM逻辑输出
这里理论参考来源朽木白露大佬的博客,挑重点看就好:https://blog.csdn.net/qq_45467083/article/details/108814176?spm=1001.2014.3001.5506

5.软件代码

/**
 * @brief 裸机任务调度器核心循环
 * @note  非抢占式轮询调度,在 main() 的 while(1) 中循环调用
 *        本调度器基于时间片判断任务是否到期,不涉及任务切换和上下文保存
 *        所有任务共享主堆栈,任务函数不可阻塞(无延时、无等待)
 */
void scheduler_run(void)
{
    // 遍历任务数组中的所有任务
    // task_num 在编译时由数组大小计算得出,无需动态内存
    for (uint8_t i = 0; i < task_num; i++)
    {
        // 获取当前系统时间(毫秒)
        // HAL_GetTick() 由 SysTick 中断每1ms累加一次
        // 读操作是原子的(32位读取),无需关中断保护
        uint32_t now_time = HAL_GetTick();

        // 判断任务是否到期:当前时间 >= 上次执行时间 + 执行周期
        // 注意:这里使用 >= 而非 ==,是为了防止某次轮询错过精确时刻时
        // 任务被延迟到下一个周期,导致“丢帧”
        // 使用 >= 可以保证任务不会因为调度器轮询间隔不均匀而丢失执行机会
        if (now_time >= scheduler_task[i].rate_ms + scheduler_task[i].last_run)
        {
            // 更新上次执行时间
            // 注意:这里直接赋值为 now_time,而不是 last_run + rate_ms
            // 这样做的好处是:当调度器负载较重时,任务不会“追赶”延迟的时间
            // 而是以当前时刻为基准,等待下一个周期到来
            // 这是一种“自适应”的补偿机制,避免任务在恢复后连续执行多次
            scheduler_task[i].last_run = now_time;

            // 执行任务函数(函数指针调用)
            // 所有任务函数原型统一为 void func(void)
            // 任务函数内部不能使用阻塞式延时(如 HAL_Delay)
            // 否则会导致后续所有任务的执行被推迟
            scheduler_task[i].task_func();
        }
    }
    // 一轮调度结束
    // 由于采用非抢占式设计,所有任务按数组顺序依次检查执行
    // 数组中下标越靠前的任务,优先级越高(先被检查和执行)
    // 电机控制任务(10ms)放在第一位,OLED刷新任务(100ms)放在最后
}

这段代码是系统软件架构的核心——一个基于时间片轮询的非抢占式任务调度器。

在项目开发初期,我面临一个选择:引入RTOS(如RT-thread)还是自己写一个轻量级调度器。考虑到系统任务数量有限(电机PID控制、蓝牙数据处理、OLED刷新、视觉数据解析),且当时学业生活繁忙,我选择了后者。

这个调度器实现了“在裸机上跑出多任务效果”的目标——它不是一个操作系统,但它的调度逻辑已经具备了一个微型内核的雏形。

Tips

image.png
具体代码/Gerber/3D见附件。关于视觉模块其实只要带有神经网络的CAM都可以,目前AI发展迅速,听闻同好说非傻瓜式的视觉也已经成熟了。

开发环境和变更点请看Readme。

在下一版本的项目中我会优先考虑RTOS,合理化使用资源,敬请期待。

以上,感谢!🙏

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

3D模型

序号文件名称下载次数
1
Mechanical.zip
4

附件

序号文件名称下载次数
1
自动模式.mp4
2
2
手动模式.mp4
1
3
Bluetooth_debugger.apk
2
4
BOM_Board1_SCH_捡球车_2026-07-05.xlsx
2
5
Readme_天空星自动羽毛球捡球机器人(2025).md
5
6
SW_HW_Mech天空星自动羽毛球捡球机器人(2025)_20260705.zip
5
克隆工程
添加到专辑
0
0
分享
侵权投诉
知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

底部导航