基于 STM32 与 K230 的麦轮视觉拾取机器人:系统方案与硬件设计 (未完成版)
前言
我认为,学习嵌入式成长最快的方式就是做项目。单独学习 GPIO、定时器、ADC 和串口时,每个知识点都有对应的例程,但真正把它们放进同一个系统里,才会开始考虑引脚怎么分配、电源怎么供、模块之间怎么通信,以及一个动作应该在什么条件下执行。
因此,我决定制作自己的第一个综合项目:基于 STM32 与 K230 的麦轮视觉拾取机器人。希望通过这次项目,把之前学过的单片机外设、PCB 设计、电源设计和舵机控制串起来,再逐步加入无线遥控与视觉识别。
这个项目的应用背景来自物流搬运。物品从一个位置送到另一个位置,中间既有移动,也有寻找、对准和拾取。对重复的小件搬运任务来说,人工操作需要不断调整位置、判断目标、完成抓取;如果只用固定位置的机械臂,工作范围又会受到安装位置限制。
于是,我想把能够灵活移动的麦克纳姆轮底盘与机械臂结合起来:由人遥控小车接近目标,再让视觉系统提供目标位置,由机械臂完成拾取。先围绕一个明确的小场景,把“移动到附近—识别目标—执行抓取”这条流程建立起来。
项目状态:未完成版,更新于 2026 年 9 月 25 日。 目前已完成遥控器和机械臂控制板的原理图、PCB 设计,并进行了单舵机按键控制的基础实测;小车控制板尚未绘制。本文记录当前的系统方案、硬件设计与控制基础。
从应用场景确定设计目标
移动、定位和拾取分别解决什么问题
物流场景给这个项目的启发,主要落在三个方面。
首先是工作位置会变化。物品未必总在同一个位置,移动底盘可以把机械臂带到不同的工作区域。
其次是靠近目标后还需要对准。普通前进、后退和转向会让近距离调整变得反复。麦克纳姆轮底盘能够通过四个车轮的配合实现前后移动、横向平移和旋转,适合用来调整机械臂与目标之间的位置关系。
最后是拾取动作需要知道物体在哪里。仅靠手动逐个调节关节,操作步骤比较多。加入视觉后,可以把目标定位交给相机,把动作执行交给机械臂控制器,让操作者主要负责移动和发起任务。
本项目的操作流程
项目围绕红、绿、蓝色小方块开展,先在桌面完成机械臂与视觉系统的配合,再把机械臂和相机安装到小车上,拾取地面上的目标。
预期的操作流程为:
- 使用遥控器驾驶小车,接近目标方块。
- 视觉系统识别目标,判断其是否进入有效拾取区域。
- 目标满足拾取条件后,通过蜂鸣器提示。
- 操作者按下自动拾取按键,小车保持停止。
- 重新确认目标位置,机械臂执行接近、夹取和抬起动作。
- 动作结束后返回状态,等待下一次操作。
这里的自动化重点是停车后的视觉定位与机械臂拾取。底盘的移动由操作者遥控,便于先把识别、抓取和运动控制之间的关系理清楚。
第一阶段把自动化做到哪一步
确定方案时,一个重要的决定是把第一阶段的目标放在“手动接近、按键触发、停车抓取”。如果同时加入自主接近目标,视觉就要参与底盘行驶控制,系统还要处理车身姿态变化、移动中的目标定位,以及底盘与机械臂何时交接控制权。
因此,我先由操作者完成大范围移动,把自动化集中到一个静止工作区域内。这个取舍保留了视觉拾取的核心问题,同时让每一次动作的起点更容易确定。蜂鸣提示表示系统认为目标具备拾取条件,按键则表示操作者确认开始,二者在流程中承担不同职责。
系统方案与模块分工
整套系统划分为遥控器、小车、机械臂三个 STM32 控制端,另外使用庐山派 K230 承担视觉处理。
| 模块 | 主要职责 | 与其他模块的连接 |
|---|---|---|
| 遥控器 | 采集摇杆和按键,选择控制对象,发送指令并显示状态 | 通过 nRF24L01 分别联系小车和机械臂 |
| 小车控制端 | 接收移动指令,控制四轮麦克纳姆底盘 | 与遥控器进行无线通信 |
| 机械臂控制端 | 接收操作指令和视觉结果,控制五路舵机,管理动作流程 | 无线连接遥控器,串口连接 K230 |
| 庐山派 K230 | 采集图像,识别颜色目标,输出定位信息 | 通过串口与机械臂 STM32 交换数据 |
通信关系可以概括为:
1 | ┌─ 无线 ─ 小车 STM32 ─ 四轮底盘 |
三块主控的划分依据
小车和机械臂分别与遥控器通信,协调指令由遥控器发起。底盘控制围绕四轮运动展开,机械臂控制围绕关节和抓取动作展开,遥控器则围绕人的操作展开。按这些任务划分,机械臂可以脱离底盘先做桌面调试,小车也可以单独验证遥控行驶。
这种划分增加了主控数量,也需要维护两条无线通信链路。相应地,每块板的任务、接线和调试入口比较明确,修改机械臂动作时可以集中在机械臂端。对于这个逐步搭建的项目,我更看重各部分能够独立推进。
机械臂和小车之间没有直接通信,因此停车确认、抓取请求和动作状态需要经过遥控器协调。这也决定了后续协议需要传递双向状态:除了“发出指令”,还要知道指令是否被接收、当前是否允许执行下一步。
视觉处理与运动控制分开
图像识别和舵机控制需要的资源不同。相机侧需要采集、处理图像,运动侧则需要持续管理 PWM、关节目标与动作顺序。本版让 K230 处理图像,通过串口发送目标结果;STM32 接收结果并管理执行过程。
这样划分后,板间传递的内容可以集中在目标位置、有效性和任务状态上。联调时也可以先向 STM32 输入一个已知位置,检查机械动作,再接入视觉定位结果,便于判断偏差来自识别、坐标换算还是执行过程。
机械臂端沿用已有的 STM32F103C8T6 最小系统板。它提供定时器、ADC、SPI 和 USART 等外设,能够分别对应舵机 PWM、电池检测、无线通信和视觉串口。STM32F103C8 官方资料列出了这些外设资源,设计扩展板时再根据实际引脚复用关系进行分配。
遥控器原理图设计
遥控器是整套系统的人机交互入口。这一版采用双摇杆、十二个独立按键、OLED 显示和三路指示灯,并将电池供电与无线通信一起集成到手柄形状的 PCB 上。

电池供电与电压检测
遥控器按单节锂电池供电设计,电池经过电源开关,再由 XC6206P332MR-G 稳压至 3.3 V,提供给控制与外围电路。
电池检测使用电阻分压后接入 PA0。上臂电阻为 10 kΩ,下臂电阻为 22 kΩ,采样节点并联 100 nF 电容。
按常规单节锂电池满电 4.2 V 代入,采样电压约为 2.89 V。软件可以根据 ADC 采样值换算电池电压,再用于屏幕显示和低电量提示。
双摇杆与独立按键
两个摇杆分别提供 X、Y 两个模拟量以及按压开关。四个模拟量接入 PA1~PA4,两个摇杆按压信号接入 PB0 和 PB1。
摇杆适合表达连续的方向和速度变化;独立按键适合发出模式切换、动作触发等离散指令。本版保留十二个独立按键,其中 U10 用作模式键,用来切换小车与机械臂的操作模式;顶部的 SW1 则负责电源通断。
按键通过上拉电阻保持默认高电平,按下时拉低。每个按键独立接入 GPIO,程序可以直接读取按键状态,再进行消抖和事件处理。
双摇杆的考虑来自麦轮的操作需求:前后移动、横向移动和旋转需要三个连续控制量,两个双轴摇杆提供四个模拟输入,便于安排驾驶操作,也为机械臂模式保留输入空间。
按键部分最终采用十二路独立 GPIO。与矩阵扫描相比,这种接法占用更多引脚,但各键的电平和布线可以直接对应,单键检查、消抖以及组合操作的处理也更直观。这一版优先采用这种便于逐个调试的连接方式,并在分配时一起核对 JTAG、串口等复用功能。
无线、显示与状态提示
nRF24L01 接入 STM32 的 SPI2:PB13、PB14、PB15 分别承担时钟、接收和发送信号,PB12 为片选,PB10 控制 CE,PB11 接 IRQ。无线模块的供电处设置了 100 nF 与 10 μF 电容。
OLED 使用 PB8、PB9 两根信号线,三路 LED 分别用于低电量、小车通信和机械臂通信状态提示。这样在操作时,既可以通过屏幕读取详细信息,也能通过指示灯快速判断连接状态。
| 遥控器功能 | 接口或引脚 |
|---|---|
| 电池电压检测 | PA0 |
| 左摇杆 X / Y、按压 | PA1 / PA2、PB0 |
| 右摇杆 X / Y、按压 | PA3 / PA4、PB1 |
| OLED | PB8 / PB9 |
| nRF24L01 | SPI2,以及 CE、CSN、IRQ 控制信号 |
| 低电量、小车通信、机械臂通信指示 | PB5、PA8、PA11 |
部分独立按键使用了 PA15、PB3、PB4。对应固件需要关闭 JTAG、保留 SWD,释放这几个引脚作为普通 GPIO 使用。
机械臂控制板原理图设计
机械臂控制板将五路舵机、视觉接口、无线模块、OLED、电池检测和本地操作接口集中起来。STM32 最小系统板通过排针接入扩展板,外围接线则统一从板边引出。

逻辑电源与舵机电源分路
这一版以 12 V 电源输入为基础,电源经过开关后分成逻辑和舵机两条支路。
- 逻辑支路: 通过 MP1584EN 降压模块得到 5 V,供最小系统板及 K230 等逻辑侧设备使用;3.3 V 外设由相应的 3.3 V 电源网络供电。
- 舵机支路: 通过接线端子引出电源,连接外置舵机降压模块,再将稳压后的 5 V 接回
+5V_SERVO,分配到五个舵机接口。
两条支路共地,但 +5V 与 +5V_SERVO 分开布置。舵机启动和关节负载变化时,电流也会随之变化;将其供电路径单独安排,可以让大电流走专用配电路径,避免经过最小系统板的供电排针。
这里的关键考虑是五只舵机在真实动作中的供电需求。机械臂伸出、抬升和夹持时,各关节的负载并不相同,同时动作时电源还要承担叠加的电流变化。因此,单只舵机能转动,只能作为单路控制的基础;整臂电源需要结合关节负载与并发动作安排。
本版将逻辑降压留在板上,把舵机降压做成外置模块接口。这样在确定实际供电能力时,可以调整舵机电源模块,同时保留已经安排好的主控和信号接口。代价是增加一组外部模块与接线,收益则是电源选择更加灵活。
分路供电仍然共享信号参考地。布线时需要让舵机电流沿电源入口与舵机接口之间的路径流动,并减少与主控、无线模块共用的回流路径,才能让这项电源划分在 PCB 上发挥作用。
这也是之前制作两级降压电源板之后,在实际项目中进一步考虑的问题:除了输出电压,还要根据负载特性安排电源支路与连接方式。
五路舵机 PWM
机械臂共使用五只舵机,包含夹爪。扩展板为每一路提供 PWM、5 V 舵机电源和 GND 三根连接。
| 接口 | STM32 引脚 | 定时器通道 |
|---|---|---|
| H1 | PA1 | TIM2_CH2 |
| H2 | PA6 | TIM3_CH1 |
| H3 | PA7 | TIM3_CH2 |
| H4 | PB0 | TIM3_CH3 |
| H5 | PB1 | TIM3_CH4 |
这样可以使用硬件定时器产生五路 PWM。程序更新各通道的比较值,就能分别设置舵机的目标位置。接口编号用于组织接线,实际关节与通道的对应关系再按装配位置统一管理。
K230 视觉接口与调试串口
视觉端选用庐山派 K230,机械臂板上的 H6 引出 5 V、PA9、PA10 和 GND。PA9、PA10 分别作为 USART1 的发送与接收信号,与 K230 的接收、发送信号交叉连接。
本项目把图像采集与识别安排在 K230 上,STM32 侧接收目标信息并执行动作。两块板之间的串口连接与配置,可结合庐山派官方的UART 开发文档进行实现。
板上另外引出了 PA2、PA3 对应的 USART2 调试口。视觉通信与调试输出各用一组串口,便于联调时同时查看识别数据和机械臂状态。
电池采样与本地操作
机械臂板同样使用 PA0 检测输入电压,分压电阻采用上臂 10 kΩ、下臂 3 kΩ,并在采样节点并联 100 nF 电容。
12 V 输入时,采样电压约为 2.77 V;按 12.6 V 计算时,约为 2.91 V。软件读取 ADC 后,可以用对应的分压比例还原输入电压。
此外,板上还设置了 OLED 接口、四个本地按键、指示灯和蜂鸣器接口。本地按键用于单板操作,OLED 用于查看运行信息,蜂鸣器则承担目标进入拾取区域等事件提示。
PCB 布局与接口安排
遥控器:按握持方式安排器件
遥控器采用手柄轮廓,上方布置两个摇杆,左右握持区域及中间位置布置独立按键,电源开关位于顶部。这样的布局围绕双手操作展开,让连续控制和动作按键各有位置。

无线模块接口朝向板外,显示与主控连接区域布置在中部。设计中同时预留了四个安装孔,便于后续安装支撑件或外壳。

机械臂板:按接线方向划分区域
机械臂控制板约为 100 mm × 78 mm。电源输入和开关位于左上方,五路舵机接口沿左侧排列,K230 和 OLED 接口位于左下区域,nRF24L01 接口位于右上方,STM32 最小系统板插座位于右侧。

布局时重点考虑了三件事:
- 舵机电源就近分配。 舵机接线端子与五路接口放在相邻区域,使用较宽的电源走线连接。
- 信号按功能集中。 视觉、显示、无线与调试接口分别安排,降低接线时相互穿插的程度。
- 保留插拔与安装空间。 最小系统板的 USB 一侧朝向板边,安装孔分布在四角。
本版将舵机电源主干按 60 mil、逻辑 5 V 主干按 30 mil、一般信号线按 10 mil 进行布线,并使用顶底层地铜连接地网络。宽线用于降低配电路径的电阻,实际承载能力仍与铜厚、长度、连接器和温升共同相关。

以上图片为本版 PCB 布线与三维预览,便于对照原理图查看各模块在板上的位置。
从单舵机控制建立软件基础
机械臂的动作最终要落实到各路舵机控制,因此我先使用 STM32F103C8T6 做了单舵机按键控制实验。通过按键改变舵机指令,已经完成基础转动测试。
现有测试工程将 PWM、舵机角度换算、按键和 OLED 显示分别封装。主程序读取按键事件,更新目标角度,再调用舵机接口输出,并在 OLED 上显示当前指令值。
定时器怎样产生舵机信号
测试程序使用 PA1 对应的 TIM2_CH2,定时器时钟按 72 MHz 配置,预分频器设置为 71,自动重装值设置为 19999:
这样每次计数对应 1 μs,一个 PWM 周期为 20 ms。改变比较寄存器的值,就能改变每个周期内的高电平时间。
测试工程采用 500~2500 μs 对应 0~180° 的换算设置,角度到脉宽的关系为:
这组数值是当前测试工程的设置。整臂使用多种舵机,软件中会分别管理各关节的脉宽范围、转动方向和机械限位。
从一个通道扩展到动作流程
单舵机程序解决的是“给定角度,输出对应 PWM”。五路机械臂还需要在这个基础上组织多个关节的动作顺序。
因此,后续程序按三层展开:底层产生各路 PWM,中间层管理关节目标与限位,上层管理观察、接近、夹取和抬起等动作。这样调整某个关节的参数时,不必同时改写整套抓取流程。
OLED 上显示的是发送给舵机的目标角度。当前普通 PWM 接口提供位置指令,关节实际运动情况则结合机械结构和调试观察来确认。
视觉定位与自动拾取方案
相机装在车体上,还是跟着夹爪运动
相机安装位置是这个项目中影响较大的一个选择。考虑过的两种方向,一种是固定在车体或机械臂底座附近,另一种是安装在夹爪后方,随腕部一起运动。
| 安装方向 | 有利之处 | 需要处理的问题 |
|---|---|---|
| 相对车体固定 | 相机与机械臂底座之间的安装关系保持固定,便于组织坐标换算 | 需要安排可用视野,处理机械臂遮挡和支架避碰 |
| 随腕部运动 | 可以随夹爪接近目标,便于观察局部区域 | 相机相对底座的位置随关节变化,还会增加腕部负载与活动线缆 |
对当前方案而言,优先考虑车体固定、斜向下观察。普通 PWM 舵机接口没有向 STM32 返回实际关节角度,如果让相机跟随腕部运动,再根据指令角度推算它的位置,关节间隙和负载引起的偏差也会进入定位过程。固定相机可以减少这部分随动作变化的关系。
从几何上看,腕部相机需要结合相机与夹爪的安装关系,以及当前机械臂姿态,才能把观测转换到底座坐标;固定相机则可以建立相机到底座的固定转换关系。OpenCV 的手眼标定说明介绍了这两类安装关系。本文据此优先采用较适合当前控制基础的固定相机方案。
支架从一开始就考虑装车
桌面调试时,高架俯拍很容易获得较完整的画面,但最终机械臂和相机都要安装到小车上,支架高度、底盘空间以及运动时的晃动都要一起考虑。因此,目前优先评估紧凑的固定支架,让相机斜向下观察车前区域。
相机只需覆盖计划使用的拾取区,安装位置则要避开机械臂伸展和回转时扫过的空间。这里的“固定”是相对车体和机械臂底座固定;车体姿态、相机安装关系或工作面高度变化时,仍要重新核对标定关系。
先建立一个明确的拾取区域
本项目先面向静止的彩色方块。相机方案优先考虑相对底盘和机械臂底座固定,斜向下观察车前区域;小车把目标送入视野与机械臂都能覆盖的范围,再停车拾取。
有效拾取区域需要同时满足:目标能被相机看清、机械臂能够到达、运动路径有足够空间。这样“发现目标”与“可以开始抓取”就有了明确的判断条件。
从图像位置到机械臂目标位置
视觉部分按以下流程组织:
- K230 获取图像,识别目标颜色和位置。
- 根据标定关系,将图像中的位置换算到机械臂使用的坐标系。
- 判断目标是否处于设定的有效拾取区域。
- 将目标信息发送给机械臂 STM32。
- 操作者触发任务后,更新目标位置,再执行抓取动作。
相机得到的是图像坐标,机械臂需要的是相对自身底座的位置。两者之间通过标定建立联系;由于相机采用斜视方案,标定时还需要考虑透视关系与目标所在平面。
这里还有一个容易被忽略的考虑:识别参考点所在的高度要与标定一致。 如果检测的是方块顶面中心,它与地面之间有一个方块高度。斜视条件下,将顶面上的点直接套用地面映射,会引入位置偏差。因此,标定方案要先说明定位的是哪个面、哪个点,再把它转换成夹爪需要到达的位置。
用状态组织一次拾取
一次自动拾取可以按“等待指令 → 确认目标 → 接近 → 夹取 → 抬起 → 结束”划分状态。每个状态负责一段动作,并规定进入下一状态的条件。
遥控器在发起抓取时协调底盘停止与机械臂动作,抓取期间保持停车;机械臂端返回执行状态,遥控器据此显示任务进度。这个分工让移动操作和拾取操作能够衔接起来。
动作配合的重点是明确“什么时候允许开始”。软件设计中将停车确认放在伸臂之前,并在停车后使用新的视觉观测复核目标位置,避免直接沿用行驶过程中取得的位置。
无线指令也需要区分持续控制和单次任务:摇杆可以持续更新速度请求,拾取按键则对应一次任务。为此,计划给动作请求分配序号,重复收到同一个请求时返回状态,避免因长按或无线重发重复启动抓取。通信恢复后也要等待新的操作请求,保持任务起点明确。
当前进度与小车控制板规划
截至本次记录,项目已形成以下基础:
| 项目部分 | 当前进度 |
|---|---|
| 系统总体方案 | 确定三个 STM32 控制端、无线通信关系与 K230 视觉分工 |
| 遥控器 | 原理图与 PCB 设计完成,包含双摇杆、十二个独立按键、显示及无线接口 |
| 机械臂控制板 | 原理图与 PCB 设计完成,包含五路舵机、分路供电与 K230 接口 |
| 舵机控制基础 | 已进行单舵机按键控制实测,建立 PWM、按键与显示测试工程 |
| 视觉自动拾取 | 已确定流程与接口方案,后续进行识别、标定和动作联调 |
| 小车控制板 | 尚未绘制,按四轮麦克纳姆底盘规划 |
小车板将承担四路电机驱动、无线接收和底盘运动控制,并结合超声波测距、灯光等功能安排接口。绘制时需要同时考虑电机供电路径、驱动电流和 STM32 外设资源,使它能够与遥控器、机械臂端配合。
项目推进顺序是先把桌面上的机械臂与视觉流程建立起来,再完成小车板和底盘控制,最后进行装车与整机联调。相机与机械臂的安装关系从桌面阶段就一并考虑,方便后续迁移到移动底盘。
为什么先做桌面验证
抓取位置出现偏差时,原因可能在图像定位、坐标换算、关节参数,也可能来自底盘移动。如果把所有部分一次装到车上,这些影响会叠在一起。桌面阶段固定底座,可以先围绕视觉与机械臂检查问题,把底盘运动的影响放到后续阶段处理。
桌面验证按“单关节动作 → 给定位置的机械动作 → 视觉提供位置 → 整车配合”的顺序推进。前一步建立可用基础后,再接入下一部分,更容易解释每次测试的结果。
同时,相机与机械臂尽量安装在同一套可迁移的底板上,提前考虑车上安装面与地面之间的高度关系。这样桌面阶段得到的机械结构和接线安排可以继续使用,装车时再围绕实际视野、工作面和底盘姿态核对标定。
总结
从之前的降压电源板,到这次遥控器和机械臂控制板,设计中需要同时考虑的事情明显增加了:引脚既要满足连接数量,也要对应合适的外设;供电既要提供正确电压,也要照顾执行器的电流变化;各个模块还要围绕同一次操作配合起来。
这个项目让我开始把“会用某个外设”进一步落实到“用这些外设完成一件事”。目前完成的两块 PCB,将摇杆、无线、视觉接口和五路舵机控制放进了明确的系统分工中。接下来继续沿着这套结构,把小车控制板和视觉拾取流程逐步实现,让设计真正落实到机器人动作上。
参考资料
- STM32F103C8 官方产品资料:主控外设资源与配套文档。
- 庐山派 K230 串口通信文档:串口配置、收发与接线说明。
- LM2596+AMS1117 两级降压电源设计:此前的电源设计与实测记录。